当前位置: 首页 > 面试题库 >

正在加载图标资源错误

吕天逸
2023-03-14
问题内容

在Eclipse中,当我运行代码时,此方法有效:

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;


   public class Main {

    public static void main(String[] args) {

        JFrame frame = new JFrame("test viewing images");

        frame.setSize(600,300);     
        frame.setLocationRelativeTo(null); // centered on monitor   
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        /**
         * Menu Bar stuff
         */

        JMenuBar menuBar;
        JMenu menu;
        JMenuItem menuItem;

        // MENU BAR 
        menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);
        menuBar.setVisible(true);

        // MENU 1
        menu = new JMenu("File");
        menuBar.add(menu);

            // MENU 1 ITEM
            ImageIcon icon = new ImageIcon("src/Action-exit-icon.png");     
            menuItem = new JMenuItem("Exit Program", icon);
            menu.add(menuItem);


        frame.setVisible(true);

    }

   }

这是我的Package Explorer中的文件结构:

ShowImage (project)
 > src / Main.java
 > src / Action-exit-icon.png

此外,此工作空间位于Z:\ eclipse_projects中

我可以看到 ImageIcon图标= new ImageIcon(“ src / Action-exit-icon.png”);
运行良好,而menuBar可以完成工作。

现在,我们导出该项目,然后我将JAR通过电子邮件发送给我的一个朋友。

  1. 右键单击项目>选择导出
  2. 选择Java>可运行的JAR文件
  3. 我在启动配置中选择主文件
  4. 导出目的地:我的桌面
  5. 库处理:将所需的库提取到生成的JAR中
  6. 转到我的桌面,双击ShowImage.jar

JFrame出现了,但是 Action-exit-icon.png 根本没有出现。

当我打开ShowImage.jar时,要查看其内容,我会看到Main.class,Action-exit-icon.png,META-INF。

好的,我现在对于如何引用图像或任何资源感到非常困惑。我究竟做错了什么?


问题答案:
new ImageIcon("src/Action-exit-icon.png");

String一个构造函数ImageIcon假定表示一个字符串File路径。

该映像显然是应用程序资源,并且在部署时(在Jar中)将成为嵌入式资源。因此,必须URL从应用程序的运行时类路径访问它,如下所示:

new ImageIcon(getClass().getResource("/src/Action-exit-icon.png"));

全面检查代码,我得到以下信息:

import java.awt.Color;
import javax.swing.*;

public class JavaGui148 {

    public JComponent getGUI() {
        JPanel p = new JPanel();

        p.setBackground(Color.GREEN);

        return p;
    }

    public JMenuBar getMenuBar() {
        /**
         * Menu Bar stuff
         */
        JMenuBar menuBar;
        JMenu menu;
        JMenuItem menuItem;

        // MENU BAR 
        menuBar = new JMenuBar();
        menuBar.setVisible(true);

        // MENU 1
        menu = new JMenu("File");
        menuBar.add(menu);

        // MENU 1 ITEM
        ImageIcon icon = new ImageIcon(getClass().getResource(
                "/src/Action-exit-icon.png"));
        menuItem = new JMenuItem("Exit Program", icon);
        menu.add(menuItem);

        return menuBar;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JavaGui148 gui = new JavaGui148();

                JFrame f = new JFrame("Demo");
                f.setJMenuBar(gui.getMenuBar());
                f.add(gui.getGUI());
                // Ensures JVM closes after frame(s) closed and
                // all non-daemon threads are finished
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                // See http://stackoverflow.com/a/7143398/418556 for demo.
                f.setLocationByPlatform(true);

                // ensures the frame is the minimum size it needs to be
                // in order display the components within it
                f.pack();
                // should be done last, to avoid flickering, moving,
                // resizing artifacts.
                f.setVisible(true);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}


 类似资料:
  • 这是我的应用程序的文件夹结构 在我的文件,我像这样加载字体和资源 对于这个,运行将给出退出代码0。 在我家。dart我有以下课程: 我在其他地方使用,以显示图像(代码省略): 这座大楼没有错误。颤振博士-v没有给出任何错误,颤振分析-v也没有给出任何错误。apk似乎构建得很好,但当应用程序在我的手机上打开时,我在asset_bundle中发现以下错误。投掷: 发生异常。错误(无法加载资源:imag

  • 所以我尝试使用FXML登录示例的示例,只是我给出了FXML的其他方法。在fxml文件中,我给出了控制器的方法。 登录控制器类 第28行是: 我提到fxml文件在另一个文件夹中,即主文件文件夹。我不明白为什么在使用Oracle给出的示例时会出现这个错误,但使用的是另一个文件夹结构! 我的应用程序文件夹结构: 主 模型 安全性 skinfolder-CSS skinfolder-fxml skinfo

  • 我的'pubspec.yaml'文件: 我正在使用以下代码将图像加载到页面中:在“登录page.dart”文件中:

  • 我制作了一个简单的applet,它加载了包含在中的图像。我制作的jar文件。该项目有一个名为“kap12”的包和一个名为“U1”的类。我有一个名为“resrc”的文件夹,其中包含我的图像。此文件夹位于根目录中(与kap12文件夹相同)。 这是目录结构: 当我在Eclipse中使用Appletviewer(没有.jar)运行该程序时,它运行得很好。它定位并显示图像。但当我用html运行它时。然后程序

  • 现在我已经阅读了这里的文档:http://docs.oracle.com/javase/tutorial/uiswing/components/icon.html 但是我仍然不明白...我如何在我的代码中实现它? 我不能将getImage更改为getResources,因为它需要一些东西,我不知道是什么。 编辑:这是图像行现在的样子:图像pic=

  • 我对javafx非常陌生,而且已经学会了使用代码教程进行测试时: 异常是由第行