如何将图像图标设置为JButton

Ale*_*gak 5 java swing packaging image imageicon

我不是很擅长创建Swing应用程序.所以我有问题如何设置图标JButton.

我的项目结构如下所示:

在此输入图像描述

JButtonMainWindow课堂上很简单:它看起来像这样:

tactButton = new JButton("next tact");
Run Code Online (Sandbox Code Playgroud)

我想使用方法将图像设置为此按钮setIcon.我的代码看起来像这样:

tactButton.setIcon(new ImageIcon(getClass().getResource("/images/button_next.jpg")));
Run Code Online (Sandbox Code Playgroud)

但是当我启动应用程序时,我有例外:

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)
Run Code Online (Sandbox Code Playgroud)

所以我尝试了不同的东西:

  • 把所有的照片在同一文件夹中MainWindow的类
  • 将图片放在项目根文件夹中
  • 尝试类似的东西 tactButton.setIcon(new ImageIcon("/images/button_next.jpg"));

但我有这个例外,或者如果我使用tactButton.setIcon(new ImageIcon("/images/button_next.jpg"));我有简单的按钮没有图像.

最后,我写了我的图像的绝对路径,这很好(但绝对路径不是好主意).你能帮帮我吗?

我看了一个问题如何将图像添加到JButton并试图像那样做.

UPDATE

创建按钮和设置图标的完整代码:

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));
Run Code Online (Sandbox Code Playgroud)