如何解决在Java Swing的菜单栏上显示图标
我有一个带有Swing GUI的应用程序,我想在菜单栏中添加带有搜索按钮(lupe图标)的搜索字段。但是,lupe图标将不会显示。这是我的代码:
public class Ui_Frame {
public static void main(String[] args) {
SwingUtilities.invokelater(Ui_Frame::createAndShowGUI);
}
private static void createAndShowGUI() {
f = new JFrame("Myframe");
...
JMenuBar menubar = new JMenuBar();
Icon lupeIcon = new ImageIcon("Resources/lupe_icon.png");
JButton j_searchButton = new JButton(lupeIcon);
menubar.add(j_searchButton);
...
f.setJMenuBar(menubar);
f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
我的项目结构就像
Project
Src
Ui_Frame.java
Resources
lupe_icon.png
结果按钮完全不显示图标:
我没有收到任何错误消息,它编译时没有问题。即使当我尝试从新的ImageIcon(...)捕获任何异常时,也没有得到关于错误原因的任何提示。
关于我在这里做错什么的任何想法?
编辑:
这是一个最小的示例:
import javax.swing.*;
public class test {
private static JFrame f;
public static void main(String[] args) {
SwingUtilities.invokelater(test::createAndShowGUI);
}
private static void createAndShowGUI() {
f = new JFrame("Test");
JMenuBar menubar = new JMenuBar();
Icon lupeIcon = new ImageIcon(test.class.getResource("/Resources/lupe_icon.png"));
JButton j_searchButton = new JButton(lupeIcon);
menubar.add(j_searchButton);
f.setJMenuBar(menubar);
f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setSize(500,500);
f.setVisible(true);
}
}
如您所见,我现在按照@AndrewThompson和@SergiyMedvynskyy的建议,使用class.getResource(...)加载图像,但这并不能解决问题。还告诉我我的类不应该是静态的,但是由于我的Main必须是静态的才能运行程序,所以我被告知我应该使用SwingUtilities.invokelater(test::createAndShowGUI);
启动UI
这也迫使createAndShowGUI()是静态的,我不知道如何使它不是静态的。
解决方法
对我来说,它的工作原理是在路径中不提及文件夹“ Resources”, 像这样:
Icon lupeIcon = new ImageIcon(test.class.getResource("/lupe_icon.png"));
但是,我不确定您的项目结构是否正确。
如果仍然无法使用,请尝试使用小“ r”重命名文件夹,也许还更改项目结构,这是我的结构:
\ src \ main \ java ...(所有Java文件)
\ src \ main \ resources(资源文件夹,它像软件包一样显示给我)
注意-我认为最好是检查为什么无法在调试中获取图像
,切换到Icon lupeIcon = new ImageIcon(test.class.getResource("Resources/lupe_icon.png"));
而不是new ImageIcon("Resources/lupe_icon.png");
来加载图标后,我注意到尽管图像明显存在,但我得到了nullpointer-exception。经过一番谷歌搜索,我发现资源文件夹显然不仅是任何文件夹,而且还必须按照建议here标记为资源根文件夹。
标记文件夹后,一切正常:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。