Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将图像图标设置为JButton_Java_Image_Swing_Packaging_Imageicon - Fatal编程技术网

Java 如何将图像图标设置为JButton

Java 如何将图像图标设置为JButton,java,image,swing,packaging,imageicon,Java,Image,Swing,Packaging,Imageicon,我不太擅长创建Swing应用程序。所以我有一个问题,如何将图标设置为JButton 我的项目结构如下所示: tactButton = new JButton("next tact"); tactButton.setIcon(new ImageIcon(getClass().getResource("/images/button_next.jpg"))); 我在main窗口中有一个简单的JButton: 看起来是这样的: tactButton = new JButton("next tact

我不太擅长创建Swing应用程序。所以我有一个问题,如何将图标设置为
JButton

我的项目结构如下所示:

tactButton = new JButton("next tact");
tactButton.setIcon(new ImageIcon(getClass().getResource("/images/button_next.jpg")));

我在
main窗口中有一个简单的
JButton
: 看起来是这样的:

tactButton = new JButton("next tact");
tactButton.setIcon(new ImageIcon(getClass().getResource("/images/button_next.jpg")));
我想使用方法
setIcon
设置此按钮的图像。我的代码如下所示:

tactButton = new JButton("next tact");
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)
试一试


另外,如果您使用的是Maven,那么尝试将这个.jpg转换为.png:D

,您不需要做任何事情。M2E将为您处理一切

将源代码放入
src/main/java

将资源(图像、文本文件等)放入
src/main/resources

如果不使用默认文件夹,则应修改
pom.xml
文件以指示源和资源所在的位置。之后,右键单击项目,转到Maven-->更新项目。。。并确保选中“从pom.xml更新项目配置”框


就这样。你应该准备好了。

你的应用程序运行得怎么样?直接从Eclipse,还是通过Maven构建jar

我在树中看到一个pom.xml文件,所以我怀疑您是通过Maven构建的。在这种情况下,Maven可能不会将任何资源文件(即除了.java文件以外的任何文件)放入输出jar中。Maven希望源文件与资源放在不同的目录中。默认情况下,这些目录是src/main/java和src/main/resources。但是,看起来您可能已经为您的项目定制了源目录,因为我直接在src目录中看到了您的源文件


我将检查生成的.jar文件,以确保图像确实在其中结束。

相同的NullPointerException:(Hm..JButton在setIcon之前实例化,对吗?当您双击“button_next.jpg”时在images文件夹中,会发生什么?它打开时没有问题?是的,它打开时没有任何问题。@AlekseiBulgak我看到您使用Maven,所以您只需要正确使用Maven和M2E。拆分源和资源,并在pom.xml中正确指示它们