0

プログラムの開始時に呼び出されるメソッドがあり、jar を実行すると正常に動作しますが、jnlp ファイルを実行するとクラッシュします。

public void newImg(String i)
{
    try
    {
        File file = new File(i);
        img = ImageIO.read(file);
    }
}

ちなみに、img は bufferedImage です。

4

3 に答える 3

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チュートリアルの例外スレッドを確認することをお勧めします。

アップデート

私のコメントを参照してください。私はただ何かを試し、自分が考えていることを確認しました-atry {}とnoを含むコード、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
$ 
于 2009-03-02T00:55:44.443 に答える
1

画像を正しく読み込んでいない可能性があります。ファイルの相対位置を使用しないでください。これは、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)

于 2009-03-02T02:38:08.190 に答える
-1

正しいファイル名/パスがあることを確認してください。

ファイルシステムへのファイルアクセス権があることを確認してください。

于 2009-03-20T17:59:01.507 に答える