我有一个在我的程序开始时调用的方法,当我运行jar时它运行正常,但是当我运行jnlp文件时它会崩溃。
public void newImg(String i)
{
try
{
File file = new File(i);
img = ImageIO.read(file);
}
}
顺便说一句,img是一个bufferedImage。
答案 0 :(得分:2)
赔率是您为文件提供的路径,或权限不匹配。将File ctor放入try块,捕获异常,并找出它是什么。
看起来应该是这样的:
try {
File file = new File(i);
img = ImageIO.read(file);
} catch (Exception ex) {
// You probably want to open the java console, or use a logger
// as a JNLP may send stderr someplace weird.
Systemm.err.println("Exception was: ", ex.toString());
}
您拥有的代码不会对例外做任何事情。
您可能希望查看Java Tutorial中的exceptions thread。
查看我的评论。我刚刚尝试了一些东西并确认了我的想法 - 使用try {}
而不是catch
或finally
的代码甚至无法编译。如果这确实是您认为正在使用的代码,那么您可能正在加载旧的类文件;这个还没有汇编。
$ cat Foo.java
public class Foo {
public void tryit() {
try {
File f = new File(null);
}
}
}
$ javac Foo.java
Foo.java:3: 'try' without 'catch' or 'finally'
try {
^
1 error
$
答案 1 :(得分:1)
也许你没有正确加载你的图像。不要使用文件的相对位置。每个操作系统都有所不同。您在JAR中的图像应该像这样正确加载:
URL url = this.getClass().getResource("image.jpg");
Image img = Toolkit.getDefaultToolkit().getImage(url);
这将加载一个名为image.jpg的文件,该文件位于与该类相同的位置。如果File.pathSeparator位于其他位置,您也可以使用它。
使用以下两种方法之一将其作为资源加载:
http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getResource(java.lang.String) http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String)
答案 2 :(得分:-1)
确保您拥有正确的文件名/路径。
确保您具有文件系统的文件访问权限。