我知道留言板上有一千个关于这个问题的答案,我已经尝试了所有这些答案,但无论出于何种原因,它们都不起作用。这是我的代码的摘录:
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。所以我然后做了项目/属性/源/添加文件夹的事情,编译它,仍然是相同的结果。然后我将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);
如果您的图形保留在您的主文件夹中,这当然不起作用。您必须复制图形。
关于java - 使用 NetBeans 通过 java 程序导出图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721823/