0

私はこれに非常に慣れていないので、JavaWebstartについての私の限られた理解を許してください。

そこで、静的メソッドでこのスニペットを使用して、コンピューター上のJARファイルでアプリを動作させました(クラスはJFrameを拡張します)。

ImageIcon image = new javax.swing.ImageIcon(window.getClass().getResource("/resources/img/loginWindowTop.jpg"));
//ImageIcon image = new ImageIcon(window.getClass().getResource("/resources/img/loginWindowTop.jpg")); // tried this too
JLabel imageLabel = new JLabel(image);
imageLabel.setBounds(rect);
window.add(imageLabel);

これは、JARファイルから直接コンピューターでアプリを起動するときに機能します。JNLPファイルを使用してWebサーバーからテストすると、アプリがクラッシュし、次のように表示されます。

java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at gui.LoginWindow.create(LoginWindow.java:42)
at main.Starter.main(Starter.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

誰かが何をすべきか説明してくれたら本当にありがたいです。私はインターネットでかなりの時間を検索しましたが、解決策は(まだ)私を助けることができませんでした。静的なJFrame(スニペットではウィンドウと呼ばれます)を使用しているからではないことを願っていますか?

4

2 に答える 2

1

WinZipまたは7Zipでjarを開き、パスが実際にであるかどうか/resources/img/loginWindowTop.jpg、および大文字と小文字を区別するかどうかを確認します。(特に、そのキャメルケースの場合、ファイル名はファイルシステム上にある必要があります。)クラスローダーで少し難解なエラーが発生する場合は、window.getClass...単に。の代わりに試すことができますgetClass...

于 2012-04-21T19:35:29.067 に答える
0

あなたのヒントのおかげで、私はついにそれを行う方法を見つけました。私のクラスLoginWindowは静的な方法でのみ使用されるため、使用する必要がありました

ImageIcon image = new ImageIcon(LoginWindow.class.getResource("/resources/img/loginWindowTop.jpg"));

LoginWindow.getClass()は、非静的な方法でのみ機能します。

ご意見ありがとうございました。これが他の人にも役立つことを願っています。

于 2012-04-21T20:23:18.577 に答える