Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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文件时出错_Java_Eclipse_Jar - Fatal编程技术网

Java 运行JAR文件时出错

Java 运行JAR文件时出错,java,eclipse,jar,Java,Eclipse,Jar,我完成了一个我正在做的Java游戏试图通过双击图标来运行,但未运行。它在Eclipse中运行良好。 试图从命令行运行它。给了我一个NullPointerException,它位于Eclipse内部src文件夹中名为sprites的文件夹中的某个图像资源上 出于某种原因,当在Eclipse之外运行它时,它找不到这个资源 有什么建议吗 编辑 我使用Windows XP。IDE是Eclipse。在Eclipse内部,正如我所说,没有问题。 我使用以下命令来使用图像资源: Image image = n

我完成了一个我正在做的Java游戏试图通过双击图标来运行,但未运行。它在Eclipse中运行良好。

试图从命令行运行它。给了我一个
NullPointerException
,它位于Eclipse内部src文件夹中名为sprites的文件夹中的某个图像资源上

出于某种原因,当在Eclipse之外运行它时,它找不到这个资源

有什么建议吗

编辑 我使用Windows XP。IDE是Eclipse。在Eclipse内部,正如我所说,没有问题。 我使用以下命令来使用图像资源:

Image image = new ImageIcon(this.getClass().getResource("/sprites/picture.PNG").getImage();
我检查了罐子里面,所有的资源都在里面


sprites
src
中的一个文件夹。所以在我看来,它应该是有效的。有什么问题吗

如果资源文件打包到jar文件中,请使用

ClassLoader.getResourceAsStream
Class.getResourceAsStream


它们无疑是从类路径加载资源数据的方法

如果您的来源是这样的:

/src 
  /mypackage
      /myresourcespackage
          - Resources.java
          - image.png
您可以使用以下方法加载
image.png

ImageIO.read(Resources.class.getResource("image.png"));

请尝试
MyClass.class.getResourceAsStream()
。使用此方法为图像指定路径时,路径相对于MyClass.class编译文件。不是您的.java文件,也不是您的项目目录

例如,如果文件系统如下所示:

+ Project Folder
|
-> + src
|  |
|  -> MyClass.java
|
-> + bin
   |
   -> MyClass.class
   -> myImage.png
+ Project Folder
|
-> + src
|  |
|  -> MyClass.java
|
-> + bin
   |
   -> MyClass.class
   -> + Sprites
      |
      -> + Images
         |
         -> myImage.png
然后使用以下代码从
myImage.png
检索
buffereImage

InputStream stream = MyClass.class.getResourceAsStream("myImage.png");
BufferedImage myImage = ImageIO.read(stream);
请记住,在使用
getResourceAsStream()
方法时,必须指定相对于.class文件而不是.java文件的路径。许多IDE将它们放在不同的位置

您可以使用文件系统获得您想要的任何高级功能,但只需确保所有路径都正确即可。 例如,如果文件系统如下所示:

+ Project Folder
|
-> + src
|  |
|  -> MyClass.java
|
-> + bin
   |
   -> MyClass.class
   -> myImage.png
+ Project Folder
|
-> + src
|  |
|  -> MyClass.java
|
-> + bin
   |
   -> MyClass.class
   -> + Sprites
      |
      -> + Images
         |
         -> myImage.png

您只需将文件路径从
myImage.png
更改为
Sprites/Images/myImage.png“
。请注意文件扩展名的使用以及缺少前导的
/

,您可能希望签入.jar(基本上是一个压缩文件夹)对于您的资源。路径可能是错误的;)您是否检查了图像是否在jar中,并且路径是否指向正确的位置?您是否可以向我们展示您用于加载此图像的代码?操作系统?运行该图像的确切命令?jar的内容列表?所有这些都完全不重要,似乎……这个.getClass.getResource(“/sprites/file.PNG“?检查该文件是否包含在jar中(jar是一个zip文件)。删除起始文件/