質問

プログラムの開始時に呼び出されるメソッドがあり、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
$ 

他のヒント

画像を適切にロードしていない可能性があります。ファイルの相対的な場所を使用しないでください。これはOSごとに異なります。 JAR内の画像は、次のように正しくロードされる必要があります。

URL url = this.getClass().getResource("image.jpg");
Image img = Toolkit.getDefaultToolkit().getImage(url);

これにより、クラスと同じ場所にあるimage.jpgというファイルがロードされます。別の場所にある場合は、File.pathSeparatorなどを使用することもできます。

次の2つの方法のいずれかを使用して、リソースとしてロードします。

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