使用NetBeans使用java程序导出图像

使用NetBeans使用java程序导出图像,java,image,Java,Image,我知道这个问题的留言板上有一千个答案,我都试过了,但没有一个因为任何原因起作用。以下是我的代码摘录: ImageIcon icon = new ImageIcon("/home/james/programmingpics/A_Flute"); ImageIcon icon1 = new ImageIcon("/home/james/programmingpics/C_D_Flute"); ImageIcon icon2 = new ImageIcon("/hom

我知道这个问题的留言板上有一千个答案,我都试过了,但没有一个因为任何原因起作用。以下是我的代码摘录:

 ImageIcon icon = new ImageIcon("/home/james/programmingpics/A_Flute");        
    ImageIcon icon1 = new ImageIcon("/home/james/programmingpics/C_D_Flute");
    ImageIcon icon2 = new ImageIcon("/home/james/programmingpics/D_E_Flute");
    ImageIcon icon3 = new ImageIcon("/home/james/programmingpics/E_Flute");       
    ImageIcon icon4 = new ImageIcon("/home/james/programmingpics/F_G_Flute");        
    ImageIcon icon5 = new ImageIcon("/home/james/programmingpics/G_Flute");
    ImageIcon icon6 = new ImageIcon("/home/james/programmingpics/B_Flute");
    ImageIcon icon7 = new ImageIcon("/home/james/programmingpics/C_Flute");
    ImageIcon icon8 = new ImageIcon("/home/james/programmingpics/D_Flute");        
    ImageIcon icon9 = new ImageIcon("/home/james/programmingpics/F_Flute");
非常简单,当它在我的电脑上运行时,效果非常好。每当我压缩dist文件夹并将图片移出计算机上的目录并运行程序时,我都会得到空的JFrame。然后我做了project/properties/sources/addfolder,编译了它,结果仍然是一样的。然后我将classes文件夹移到dist文件夹中,尝试更改路径,看看是否有效,但仍然没有结果。听起来似乎有一个简单的答案,但我显然没有找到。

在构造函数中使用绝对路径名。绝对路径名的示例有“/home/myusername/folder/foo/bar.png”或“C:\folder\Graphics\foo\bar.png”。 在发布中给出的代码总是希望在运行时从给定的路径准确读取。如果您将图形移动到其他文件夹,您的程序将无法找到它们。这样,图形就不会包含/打包到程序中,而是在运行时(不是编译时!)从构造函数中指定的路径加载

这种绝对路径是非常糟糕的做法,因为它们阻止了程序的可移植性。其他人将无法在他们的计算机上运行您的程序。因为如果您尝试在另一台计算机上运行,代码可能会失败,因为该计算机上可能不存在路径“/home/james/…”。也许你的用户甚至不使用Linux,或者至少他的用户名不是“james”

所以你必须去掉绝对路径。相反,您应该注意将图形包含在项目中,并将它们放入JAR存档中

一种方法是将图形放入项目的目录结构中,然后执行以下操作:

URL imageURL = getClass().getClassLoader().getResource("images/A_Flute.png");
ImageIcon fluteIcon = new ImageIcon(imageURL);

当然,如果您的图形保存在主文件夹中,这将不起作用。您必须复制图形。

试图使其正常工作,但不幸的是,现在我遇到了无法从静态方法调用非静态方法的问题。我在它自己的方法中有上面的代码,flut.flut,但我正试图从主方法调用它。最后我把它全部解决了,程序运行得很好。谢谢你的帮助,我自己可能不会想到的。