我有一个在我的程序开始时调用的方法,当我运行jar时它运行正常,但是当我运行jnlp文件时它会崩溃。

public void newImg(String i)
{
    try
    {
        File file = new File(i);
        img = ImageIO.read(file);
    }
}
顺便说一句,

img是一个bufferedImage。

有帮助吗?

解决方案

赔率是您为文件提供的路径,或权限不匹配。将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教程。

更新

查看我的评论。我只是尝试了一些东西,并确认了我的想法 - 使用 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
$ 

其他提示

也许你没有正确加载你的图像。不要使用文件的相对位置。每个操作系统都有所不同。您在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)

确保您拥有正确的文件名/路径。

确保您具有文件系统的文件访问权限。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top