我有一个非常奇怪的问题。似乎从 JAR 文件中加载资源有时有效,有时无效。
Jar 文件仅包含类文件、清单和test.txt
.
当我用 Eclipse 打包它时,它通常运行良好(可以访问 test.txt 的内容),但在某些目录中,Resourceproblem.class.getResourceAsStream("/test.txt")
返回null
- 尽管它是同一个 Jar 文件!
例如,当我双击 jar 文件时\\remotecomputer\folder\subfolder\test.jar
,test.txt
找不到里面的 jar 文件。但有时(?)路径名很长并且包含空格(至少在 Windows XP SP3 上)的情况也是如此。
有任何想法吗?
示例代码:
import java.io.*;
import javax.swing.*;
public class Resourceproblem {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Resourceproblem();
}
});
}
private Resourceproblem() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
JTextArea text = new JTextArea();
text.setEditable(false);
frame.add(text);
frame.setVisible(true);
try {
InputStream in = Resourceproblem.class.getResourceAsStream("/test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
br.close();
in.close();
text.setText(line);
} catch(Exception ex) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
pw.flush();
String s = sw.toString();
pw.close();
ex.printStackTrace();
text.setText(s);
}
}
}
test.txt 只是一个文本文件,其中有一行用于检查加载是否成功。