2011-12-27 4 views
1

私は最近、私が作った.icoファイルで私のデフォルトのアプリケーションアイコンを設定しようとしました。これは私が、アイコンの作成に使用するコードです:アイコンを設定したときにjava.lang.NullPointerExceptionが発生しましたか?

initComponents(); 
java.net.URL url = ClassLoader.getSystemResource("/src/calculatormedii/resources/CMedii.ico"); 
Toolkit kit = Toolkit.getDefaultToolkit(); 
Image img = kit.createImage(url); 
getFrame().setIconImage(img); 

私はそれは、NetBeansのJavaデスクトップアプリケーションのアイコンを設定することが非常に困難である理由はわかりませんが、それだけで、残りのようなプロパティフィールドでなければなりません。私は、プログラムを実行しようとすると は、これらのエラーが表示されなかっ:

Uncaught error fetching image: 
java.lang.NullPointerException 
    at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99) 
    at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:113) 
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240) 
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172) 
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136) 

今何をすべきかは考えて。アプリケーションのアイコンを設定する別の方法がある場合は指定してください(netbeansなどのプロパティフィールドのように)

+0

あなたのアプリケーションに 'src'フォルダ/パッケージがありますか?私はあなたがコンパイルしたソースフォルダーを意味するのではなく、コンパイルされたアプリケーションのフォルダーを意味します。 – Thomas

+0

OK。この問題は修正されました。問題はパスや何かではありませんでした。 Jon Skeetがセットコードをくれたので、私はそれを使用し、アイコンはデフォルトのままでした。 問題は、私のファイルがICOファイルであることでした。 16X16バージョンのアイコンをPNGに変換して保存し、リソースに追加して問題を修正しました。 ありがとうたくさんの人、StackOverflowはプログラミング分野の宝石です、私は1分以内に私の答えを得ました! – Bugster

答えて

4

私はあなたが使用しているURLを強く疑っています。 ClassLoader.getSystemResourceを使用すると、先行するスラッシュは必要ないはずですが、私はあなたがsrcのいずれかの部分を望んでいることを非常に疑います。あなたのアイコンがあなたのクラスファイルがある同じ場所(例えばbinディレクトリ)にコピーしてからちょうど使用されていることを確認する必要があります。

URL url = ClassLoader.getSystemResource("calculatormedii/resources/CMedii.ico"); 
+0

OKアイコンファイルをそのフォルダに移動しましたが、アイコンは変更されていませんが、エラーは表示されません。それはまだJavaアプリが持っているコーヒーカップです。どんな助け?私はアイコンを2つの場所に移動しました:binフォルダと他のすべてのクラスのフォルダです。 – Bugster

+0

私は彼が 'calculatormedii /'の部分を望んでいないと思う。 – Thomas

+0

@トーマス:そのような音は、エラーが消えてしまったので、ツリーの一部です。 –

0

あなたのスタックトレースの多くを印刷するものとします。あなたがさらに見下ろすと、コード内に呼び出し側の行があり、Javaライブラリで例外が発生します。

しかし、あなたの場合には、問題は、あなたがパラメータとしてgetSystemResourceに与えるパスはあなたがコーディングされているクラスの実際のクラスファイルを含むフォルダに相対的でなければならないという事実に由来しています。

より正確に

  • ClassLoader.getSystemResourceと、パスはgetClass.getResourceUrl
  • あなたのクラスパスエントリへの相対値であり、パスはあなたがコーディングされているクラスのクラスファイルへの相対である必要があります:あなたは両方を使用することができますインチ
  • X.class.getResourceUrlとパスを使用して、Mavenので日食を使用する場合、デフォルトのフォルダ構造が

    /src/main/java 
    /src/main/resources 
    

    を持つことであるクラスXのクラスファイル

からの相対である必要がありますそして、すべてがあなたのために処理されます:Javaファイルがコンパイルされるのと同じフォルダの中にリソースファイルをコピーします。

+0

クラスがどこにあるかの相対パスを追加すると、エラーが再び発生します。私は現時点で約5つのパスを設定しようとしましたが、もし私がJon Skeetの答え以外に5つのエラーを表示した場合は、それを変更します。 – Bugster

+0

お試しください詳細。また、クラスファイルが置かれているフォルダにリソースがコピーされていることをどうやって確認しますか?コンパイル後に手動でコピーしてみてください。クラスファイルがあるファイルにicoファイルを置き、icoファイルにアクセスするためにフォルダレスパスを使用します。 – Snicolas

関連する問題