在构建Jar时,我真的面临太多的问题。问题是在Netbeans它的工作很好,但如果我试图从/dest文件夹运行.jar文件,它不调用额外的文本文件和图像。我尝试了各种解决方案,但都无法真正解决它。这是我存储.java文件的目录。src/RX/example.java
,其中RX是包名。我将所有的图像和文本文件插入到同一个目录中,并像这样调用。
JButton btnStart = new JButton(new ImageIcon("src/RX/start1.png")); //Set Image for Button
现在从文本文件中读取:
Reader reader = null;
JTextArea jtaUser= new JTextArea();
try {
reader = new FileReader(new File("src/RX/rxUser.txt"));
jtaUser.read(reader, "");
} catch (Exception exp) {
} finally {
try {
reader.close();
} catch (Exception exp) {
}
}
正如我之前所说的,问题是如果我从Netbeans运行一切都很好,但文本文件和图像不包括在.jar文件中。因此,当我打开.jar时,按钮似乎是空的,并且在读取文件时它冻结了。
我需要一个我在上面所做的相同编码的答案。所以,请告诉我或告诉我如何我可以设置图像和阅读文本文件,而不是给链接到其他答案。我非常感谢你对这个问题的回答。谢谢你。
当您作为File
对象读取文件时,程序将尝试从本地文件系统读取。如果你打算使用一个文件作为资源,那么你应该这样读取它们。
您可以从getClass().GetResourceAsStream()
获得InputStream
,然后将InputStream
传递给InputStreamReader
以用于read()
方法。在你的例子中,你会使用
InputStream is = getClass().getResourceAsStream("/RX/rxUsers.txt");
InputStreamReader reader = new InputStreamReader(is);
textArea.read(reader, ..);
我使用的路径是由类路径决定的。由于RX
dir是src
的直接子目录,因此它将位于类路径的根目录中。要从调用类获得类路径的根(使用getClass()),您需要在路径前面添加额外的/
。
要读取图像,您可以使用返回InputStream
的getResourceAsStream()
,或者使用返回URL的getResource()
。您可以将URL传递给返回Image
对象的ImageIcon(URL)
或ImageIO.read(URL)
。根据你的需要选择哪一个。例子:
URL url = getClass().getResource("/RX/start1.png"); // you will need to
ImageIcon icon = new ImageIcon(url); // handle exception