编辑此问题以包含所有要求的内容。新的图片链接将在下面添加。
我的程序在NetBeans中运行良好,并且在从NetBeans编译的jar文件运行时无法加载程序。我正在编译Java 1.6_45,这只是为了兼容性,因为这是一个面向学校的程序,适用于几乎没有任何升级或更新的旧机器。
无论如何,因为当我尝试将它作为.jar文件时程序永远不会加载,我很关心并查找手动方式来运行jar。我尝试了命令提示符命令 java -jar PhysicsEquations.jar ,我直接复制到我的Users文件夹中,所以我不必担心类路径。
这是我收到的错误消息(下面是第一个链接),一个IllegalArgumentException。我不知道该怎么做,我已经研究了几天,现在尝试不同的东西。如果可以更好地解释,我可以重试任何事情。
这是整个EquationImage类(只需几行,请耐心等待)。在其他代码中,我所做的只是调用构造函数,例如EquationImage fma = new EquationImage("fma.jpg");
,然后使用setBounds(x,y,width,height);
将其添加到我的CardLayout中添加了所有方程式的面板。
package physicsequations;
...
public class EquationImage extends JPanel {
public EquationImage() {
}
public EquationImage(String filename) {
try {
System.out.println(filename);
imageBuffer = ImageIO.read(getClass().getResourceAsStream("images/" + filename));
}
catch(IOException e) {
JOptionPane.showMessageDialog(null, "EquationImage could not find/load the file \n" + filename, "Error Message", JOptionPane.PLAIN_MESSAGE);
}
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
graphics.drawImage(imageBuffer, 0, 0, null);
}
private BufferedImage imageBuffer = null;
}
在代码和错误消息中值得注意的是,构造函数确实收到了文件名。在NetBeans中,编译器能够正确查找所有图像。但是,在我使用“清理和构建”的jar中,无论我是否真的看到带有错误的JOptionPane,它都会有所不同。
我被要求提供我的代码文件路径。
在项目中,我有PhysicsEquations文件夹。 PhysicsEquations有文件夹dist,build,nbproject和src。 PhysicsEquations还有文件构建和manifest.mf。
src有文件夹physicsequations,即EquationImage所在的包。
physicsequations然后有五个文件和一个文件夹'images'。文件是Main,EquationPanel,EquationImage,BadInputException和Variable。
图片包含我的所有图片,包括Physics.jpg,这是我在Main使用的图标:
String imagePath = "physics.jpg";
InputStream imgStream = Main.class.getResourceAsStream("images/" + imagePath);
BufferedImage myImg = null;
try {
myImg = ImageIO.read(imgStream);
}
catch(IOException e) {
JOptionPane.showMessageDialog(null, "The program has failed to load file physics.jpg from the source package.", "Error Message", JOptionPane.ERROR_MESSAGE);
}
setIconImage(myImg);
在罐子里,我打开罐子,有2个文件夹:META-INF和physicsequations。在文件夹physicsequations中,有101个类文件和一个名为images的文件夹。该文件夹中包含了我在项目中使用的所有17张图片。下面是jar中META-INF中manifest.mf文档的文本。 (有人可以向我解释为什么它说1.8?我的项目属性中有1.6 ... )
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.8.0_31-b13 (Oracle Corporation)
Class-Path:
X-COMMENT: Main-Class will be added automatically by build
Main-Class: physicsequations.Main
http://i.stack.imgur.com/IqgzE.jpg
http://i.stack.imgur.com/rHaDa.jpg
http://i.stack.imgur.com/j5Npw.jpg
http://i.stack.imgur.com/Yt2O3.jpg
我希望所有链接都会提交,因为它说我限制了10个代表。
答案 0 :(得分:0)
通过查看您的first linked image表示您尝试加载资源"fma.jpg"
和IllegalArgumentException: input == null
以及您的last image,这清楚地表明您的项目中包含的文件是名为fma.JPG
我认为很明显发生了什么事情(PS:据我所知,你的图片都没有显示名为"physics.jpg"
,"Physics.jpg"
或{{1}的文件},但我认为这里的问题是一样的):
使用"physics.JPG"
或Class.getResource(...)
的任何资源查找都
您有两种选择:
Class.getResourceAsStream(...)
重命名为"fma.JPG"
)。"fma.jpg"
更改为"fma.jpg"
)。要验证一切正确,您可以运行命令:
"fma.JPG"
(jar tf yourjar.jar
选项列出文件的目录)。它将产生类似于the following example的输出:
t
验证列表中的名称和代码是否完全相同,并且拼写匹配。
PPS:关于1.8参考:
META-INF/
META-INF/MANIFEST.MF
TicTacToe.class
TicTacToe.class
TicTacToe.java
audio/
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au
example1.html
images/
images/cross.gif
images/not.gif
这只是创建JAR的Created-By: 1.8.0_31-b13 (Oracle Corporation)
命令的版本(通常与包含它的JDK版本相同)。这可能与用于构建项目的(jar
)版本或构建所需的JDK库版本不同。