当前位置: 首页 > 知识库问答 >
问题:

为什么我的Jar不运行除非我提取文件?

温源
2023-03-14

每次运行导出的.jar文件(该文件包含一个以图像为图标的jframe


共有1个答案

南宫森
2023-03-14

“为什么我的Jar不运行,除非我解压缩文件?”

这似乎是对您的资源使用file的行为。举个例子

File file = new File("resources/image.png");
Image image = ImagIO.read(file);

和项目结构(注意,resources实际上应该在src中,这样它就会自动构建到jar中--除非您对它进行了不同的配置。但是为了这个论点,假设您在将resources构建到jar中的地方对它进行了配置)

C:\
   Project
        resources\image.png

有些考试:

>

  • 从IDE-Works运行!为什么?使用file查找文件系统上的文件。使用相对路径,搜索将从“工作目录”开始,在IDE的情况下,该目录通常是项目根。因此“resources/image.png”是相对于projectroot的有效路径

    构建jar,假设它在项目中以distdir结束。这就是它看起来的样子

    ProjectRoot
             dist
                ProjectRoot.jar
    
    URL url = Test.class.getResource("/resources/image.png");
    System.out.println(url.toString());
    
    C:\ProjectRoot
               dist
                   resources/image.png // from extracted jar
                   ProjectRoot.jar
    

    解释够了。

    由于这个原因,当您想要读取嵌入式资源时,应该像Andrew Thompson提到的那样,从一个URL读取它们。这个url应该是相对于调用它的类或类加载器的。以下是几种不同的方法:

    >

  • 如图所示

    URL url = getClass().getResource("/resources/image.png");
    
    InputStream is = getClass().getResourceAsStream("/resources/image.png");
    
    URL url = getClass().getClassLoader().getResource("resources/image.png");
    

    这会奏效的

    ProjectRoot
           src\resources\image.png
    
    URL url = getClass().getResource("/resources/image.png");
    Image image = ImageIO.read(url);
    

  •  类似资料:
    • 我在intelliJ中创建了一个Java /JavaFX应用程序。我创建了它作为一个Java的应用程序,后来为JavaFX导入了必要的部件。 我尝试了Izpack、Javapackager、Jpackager、Jpackage和创建胖jar中的各种安装程序/打包程序创建者。我什么都不行。 该应用程序在IntelliJ中运行良好。 为什么它不会在别处运行? 这是我的POM、代码和错误消息。 如果你能

    • 我为我的朋友创建了一个项目,我想问我如何使用PyInstaller解决我的问题? 我的问题是当我打字的时候 PyInstermyprogram.py 它确实创建了文件夹,但是我在其中的任何地方都找不到。它应该在dist,但它不是。

    • 问题内容: 因此,我一直在编写一个简单的3D GUI应用程序,旨在让用户只需双击JAR文件即可使用。在将其放入JAR文件之前,它可以正常工作,并且在命令提示符下运行时(在jar文件的目录中键入“ java -jar Modeler.jar”),可以在JAR文件中使其完美运行。但是,当我双击它时,什么也没有发生。它运行完美,没有命令提示符下的错误。我从经验中知道,没有显示启动时的崩溃报告,因为控制台

    • 我完成了我的程序,现在我正在尝试创建一个jar文件来运行它,但是当我尝试这样做时,什么都没有发生,没有错误,没有执行,没有任何事情。这是路径:D:\Eclipse\Workspace\Game\Src\AppPackage我编译了我的类D:\Eclipse\Workspace\Game\Src\AppPackage javac Game.java创建了我的清单和jar文件:echo main-cl