プログラムの開始時に呼び出されるメソッドがあり、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チュートリアルの例外スレッドを確認することをお勧めします。
私のコメントを参照してください。私はただ何かを試し、自分が考えていることを確認しました-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
$
画像を正しく読み込んでいない可能性があります。ファイルの相対位置を使用しないでください。これは、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)
正しいファイル名/パスがあることを確認してください。
ファイルシステムへのファイルアクセス権があることを確認してください。