为什么这个简单的代码不起作用

为什么这个简单的代码不起作用

问题描述:

我遇到了这本书中简单的示例代码的问题。它应该在一个窗口(北部和南部的标签)中一个在另一个之上代表相同的图像2次。当我运行它时,它显示this而不是this(我很抱歉没有切割图像或调整它们的大小)以下是我的代码。我在Ubuntu 13.04上运行Eclipse Juno。为什么这个简单的代码不起作用

package gui; 
import java.awt.BorderLayout; 
import javax.swing.*; 

public class Gui { 


    public static void main(String[] args) { 

     JLabel northLabel = new JLabel ("North"); 

     ImageIcon labelIcon = new ImageIcon ("GUItip.gif"); 

     JLabel centerLabel = new JLabel (labelIcon); 
     JLabel southLabel = new JLabel (labelIcon); 

     southLabel.setText("South"); 
     JFrame application = new JFrame(); 

     application.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 

     application.add(northLabel, BorderLayout.NORTH); 
     application.add(centerLabel, BorderLayout.CENTER); 
     application.add(southLabel, BorderLayout.SOUTH); 

     application.setSize(300, 300); 
     application.setVisible(true); 


    } 

} 
+2

您可能不会在正确的位置查找图像。尝试使用图像的绝对路径。要么或找出你的用户目录是在哪里,并把图像放在那里。 – 2013-05-02 23:58:14

+3

或者如果图像嵌入到应用程序中,使用'Gui.class.getResource(“GUItip.gif”);'而不是 - 使用ImageIO',它会抛出更有意义的异常... – MadProgrammer 2013-05-03 00:00:59

+0

这不是硬编码绝对路径的良好做法。将图像放置在项目内的某个位置,并将相对路径提供给根文件夹路径。 – 2013-05-03 00:01:51

您需要专注于以下语句:

ImageIcon labelIcon = new ImageIcon ("GUItip.gif"); 

当启动新的ImageIcon ..它在默认情况下,即在搜索文件夹执行所提供的地址,在这种情况下“ GUItip.gif“应在工作区/用户目录中进行搜索。

一个解决方案是在您的工作区(程序执行)文件夹中提供可用的GUItip.gif图像。 另一种解决方案是提供绝对路径。

C:\USER\Workspace\project_name\GUItip.gif 

虽然更好的方法是创建一个特定的文件夹,您可以在其中保存项目中使用的所有图像。用绝对路径创建一个最终的静态字符串变量到您的文件夹。现在,该项目中的任何程序员都很容易知道在哪里寻找图像。 有很好的方法来使用这种映射..通过XML在开始时加载..通过资源等,但这是一个完全不同的话题。

图像可能未正确加载。尝试使用try/catch块来查看是否是这种情况。

例:

Image img; 

    File f = new File(//image url); 
    try { 
     img = ImageIO.read(f); 
    } catch (IOException e) { 
     String curr_dir = System.getProperty("user.dir"); 
     throw new IllegalArgumentException("Image could not be found from " + curr_dir); 
    } 
    ImageIcon labelIcon = new ImageIcon(img); 
+0

谢谢你们。我只需要使用完整的路径名称,而不是像书中那样复制它。但是我确实把图像放在了项目目录中(就像老师告诉我的那样)。无论如何,再次感谢你。 – Deveram 2013-05-03 00:28:52