Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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 在另一台计算机上的JAR文件中显示jLabel图标时出现问题_Java_Image_Jar_Icons_Embedded Resource - Fatal编程技术网

Java 在另一台计算机上的JAR文件中显示jLabel图标时出现问题

Java 在另一台计算机上的JAR文件中显示jLabel图标时出现问题,java,image,jar,icons,embedded-resource,Java,Image,Jar,Icons,Embedded Resource,我正在构建一个普通的Java项目,我需要将其作为JAR应用程序部署到Windows上。这种类型的应用程序是独立软件,它加载我在构建此应用程序时使用的机器上的所有内容。它包含一个标志,我真的需要使可见。它在我的机器上运行得非常好,因为它总是在我的电脑上找到包含此徽标的目录,但我需要一种方法,以便在我的应用程序中构建此徽标,或者可以从项目文件夹中加载此徽标,即使我与其他机器共享此文件夹以运行我的应用程序。因此,我想让运行我的应用程序的每台机器都可以看到这个徽标,而不管文件夹在其他机器中的位置如何。我

我正在构建一个普通的Java项目,我需要将其作为JAR应用程序部署到Windows上。这种类型的应用程序是独立软件,它加载我在构建此应用程序时使用的机器上的所有内容。它包含一个标志,我真的需要使可见。它在我的机器上运行得非常好,因为它总是在我的电脑上找到包含此徽标的目录,但我需要一种方法,以便在我的应用程序中构建此徽标,或者可以从项目文件夹中加载此徽标,即使我与其他机器共享此文件夹以运行我的应用程序。因此,我想让运行我的应用程序的每台机器都可以看到这个徽标,而不管文件夹在其他机器中的位置如何。我正在使用Netbeans 1.8

提前感谢:)


通过一个标志。。。你是说窗口上角的图标吗?我将使用一个从可执行jar内部执行此操作的示例。但是,这个概念与读取要打包到jar中的任何资源类似

这里有两个关键概念,它们不同于不在jar内部运行时仅读取普通文件。事情不同

java.awt.Image frameImage = new javax.swing.ImageIcon(
    getClass().getResource("/LotsaIcon.jpg")
).getImage();
请注意,我们不是提供文件的路径,而是将此资源作为流加载(如果它的位置在jar文件中)

这里需要相对路径,相对于您的文件在jar中的位置,相对于执行java“main”的根目录。这意味着,对于位于java执行所在目录中的文件,它需要在文件名前面加斜杠。非常重要。在罐子外面你不需要这个。在一个罐子里,前面的斜杠必须在那里。。。也就是说,在这个相对目录中。相对路径,而不是绝对路径。。。相对于java代码从jar内部运行的位置

第三件事是。。。你在用maven吗?如果是这样,在构建项目时,要将资源放入jar中,需要在POM文件中告诉maven这一点

        <resources>
          <resource>
            <directory>src/my-resources</directory>
            <includes>
              <include>**/*.txt</include>
              <include>**/*.jpg</include>
            </includes>
          </resource>
        </resources>



    </build> 


src/my资源
**/*.txt
**/*jpg先生
。。。在你的POM中最后/构建之前的某个地方

否则。。。它甚至不会进入你的罐子。然后,将资源放在POM指令中看到的文件夹中。它在您的项目src/my resources中

Maven移动它,做一些事情,当它生成可执行jar时,将它放在根目录下的jar中。。。在根级别。这就是为什么我的文件的相对路径为。如果我把它放在src/my resources目录下的一堆文件夹中。。。我必须在我的文件名前面加上那个相对路径,这样程序才能知道在src/my resources中要查找的位置。。。更深

我只是用根

我希望这能让你走。有时候,对于某些事情,getResource并没有削减它,您需要转而使用getResourceAsStream。这取决于你在做什么

我希望这能给你一个起点。jar是一种不同于在磁盘上查看到位置的绝对路径的环境。这是有方法论的。您不再关注文件系统;您正在jar中查找它,没有文件系统或C:。你在鱼缸里。您还需要在鱼缸中找到您的资源,而不是在文件系统中。当你构建项目时,你也必须确保你的文件被放进鱼缸里。。。或者根本就找不到。不要忘记代码中的相对路径。。。在常规文件系统中不需要的前一个斜杠


祝你好运

将图像放在你的.jar文件中,并使用加载。请你写下如何实现这一点的步骤,尤其是使用class.getResource。我是编程新手。“步骤如何做到这一点”实际上只有一个步骤,即获取指向资源的URL。关于嵌入式资源,请参阅。我要补充一点,我假设您使用的是IDE和类似Maven的东西。如果您在命令行上手动执行此操作,则必须编写清单并告诉jar您正在将资源放入其中,并在压缩时将其打包到jar中;说明书我想你是让IDE帮你处理的。我当然喜欢。