4

Swing アプリケーションの作成が苦手です。アイコンを に設定する方法について質問がありますJButton

私のプロジェクト構造は次のようになります。

ここに画像の説明を入力

そして私はシンプルなJButtonクラスを持ってMainWindowいます:それは次のようになります:

tactButton = new JButton("next tact");

メソッドを使用して、このボタンに画像を設定したいと思いますsetIcon。私のコードは次のようになります。

tactButton.setIcon(new ImageIcon(getClass().getResource("/images/button_next.jpg")));

しかし、アプリを起動すると例外があります:

java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
    at by.bulgak.conveyor.gui.MainWindow.<init>(MainWindow.java:117)
    at by.bulgak.conveyor.gui.MainWindow$1.run(MainWindow.java:46)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

だから私はさまざまなことを試しました:

  • MainWindowすべての写真をクラスと同じフォルダーに入れる
  • 写真をプロジェクトのルート フォルダに入れる
  • のようなものを試すtactButton.setIcon(new ImageIcon("/images/button_next.jpg"));

しかし、私にはこの例外があります。または、使用する場合は、tactButton.setIcon(new ImageIcon("/images/button_next.jpg"));画像のない単純なボタンがあります。

最後に、イメージへの絶対パスを書きましたが、これは正常に機能します (ただし、絶対パスはお勧めできません)。それで、私を助けてもらえますか?

JButtonに画像を追加するにはどうすればよいですかという質問を見て、そこのようにしようとしました。

アップデート

ボタンと設定アイコンを作成する完全なコード:

tactButton = new JButton("next tact");
tactButton.setSize(100, 100);
tactButton.setIcon(new ImageIcon(MainWindow.class.getResource("/images/button_next.jpg")));
tactButton.addActionListener(new ProcessorNextStepListener(this));
4

3 に答える 3

4

Mavenを使用している場合は、何もする必要はありません。M2Eがすべてを処理します。

ソースコードを入れてsrc/main/java

リソース(画像、テキストファイルなど)をsrc/main/resources

デフォルトのフォルダを使用しない場合は、pom.xmlファイルを変更して、ソースとリソースの場所を示す必要があります。その後、プロジェクトを右クリックし、[Maven]-> [プロジェクトの更新...]に移動し、[pom.xmlからプロジェクト構成を更新する]チェックボックスをオンにします。

それでおしまい。あなたは行ってもいいはずです。

于 2013-02-18T13:48:43.943 に答える
1

アプリケーションをどのように実行していますか? Eclipse から直接、または Maven 経由で jar を構築していますか?

ツリーに pom.xml ファイルがあるので、Maven 経由でビルドしていると思われます。その場合、Maven はおそらくリソース ファイル (つまり、.java ファイル以外のもの) を出力 jar に入れません。Maven は、ソース ファイルがリソースとは別のディレクトリにあることを想定しています。デフォルトでは、これらのディレクトリは src/main/java および src/main/resources です。ただし、ソース ファイルが src ディレクトリに直接表示されているため、プロジェクトのソース ディレクトリをカスタマイズした可能性があります。

結果の .jar ファイルを調べて、画像が実際にそこにあることを確認します。

于 2013-02-18T13:49:39.907 に答える