Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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-Can';t将图像导出到可运行的jar文件中_Java_Eclipse_Jar_Export - Fatal编程技术网

java-Can';t将图像导出到可运行的jar文件中

java-Can';t将图像导出到可运行的jar文件中,java,eclipse,jar,export,Java,Eclipse,Jar,Export,我正在尝试导出一个与图像有关的程序。当我导出所述项目时,它会给我一个IllegalArgumentException,其中输入为null。我已经到处寻找答案,但每个答案似乎都不适用于我的代码: package dev.ttt; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; public class Assets { public stat

我正在尝试导出一个与图像有关的程序。当我导出所述项目时,它会给我一个IllegalArgumentException,其中输入为null。我已经到处寻找答案,但每个答案似乎都不适用于我的代码:

package dev.ttt;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Assets {

    public static BufferedImage x, o;

        public static void init() { //Loads the X and O images

            System.out.println("Loading Assets...");

            x = loadImage("/images/x.png");

            o = loadImage("/images/o.png");

            System.out.println("Assets loaded.");

       }

       public static void sayLoad(String path) { //Prints the image path to the console
           System.out.println("Loading " + path);
       }

    public static BufferedImage loadImage(String path) {
        try {
            sayLoad(path); //Prints the image path to the console
            return ImageIO.read(Assets.class.getResourceAsStream(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
你知道怎么解决这个问题吗?它可以在Eclipse中正常工作,但不能在罐子中工作

编辑:

java-jar“myjar.jar”的输出:

编辑2:

55 Sun Sep 24 17:47:30 EDT 2017 META-INF/MANIFEST.MF
1308 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/WinDetection.class
3719 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/GameLoop.class
2347 Sun Sep 24 17:47:14 EDT 2017 dev/ttt/Game.class
1451 Sun Sep 24 17:47:14 EDT 2017 dev/ttt/Assets.class
503 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/Launcher.class
2874 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/ai/AI.class
456 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/player/Player.class
2875 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/player/MouseInput.class
1010 Sun Sep 24 12:09:46 EDT 2017 images/O.png
1034 Sun Sep 24 12:09:46 EDT 2017 images/X.png
310 Thu Sep 21 12:22:30 EDT 2017 .checkstyle
385 Thu Sep 21 12:26:28 EDT 2017 .project
343 Sat Sep 23 21:03:18 EDT 2017 .classpath

应用程序似乎找不到在相对路径中指定的图像。尝试将图像放在jar文件附近的文件夹images中。

jar文件需要有“/images/x.png”和“/images/o.png”条目才能工作(因此它们位于类路径上)。因为某种原因,它没有


一般来说,在这种情况下,首先要寻找的是这个世界是否真的像你想象的那样。用
jar-tvf my.jar
查看罐子内部可以发现很多

请列出“jar-tvf-your.jar”@OP-re-edit:ThorbjørnRavnAndersen没有要求stacktrace(虽然这也可能有用,所以不要删除它),但是关于jar文件结构的输出,可以通过
jar-tvf-your.jar
命令获得(更多信息,请访问)。虽然您的解决方案适用于发布的代码,这不是OP要求的。创建JAR的主要原因之一是让它包装应用程序所需的所有东西(如图像/图标)。把它们放在罐子外面是首选解决方案的倒退。这是有道理的,但是。。。我不知道如何运行它,我把它放到我的cmd提示符中,它说:“jar”不能被识别为内部或外部命令、可操作程序或批处理文件。我刚刚弄明白,必须更新我的path变量!终于明白了。。。我犯了最愚蠢的错误。。我忘了大写我的文件路径,使用jar tvf my.jar帮助我看到了这一点。谢谢你的帮助!
55 Sun Sep 24 17:47:30 EDT 2017 META-INF/MANIFEST.MF
1308 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/WinDetection.class
3719 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/GameLoop.class
2347 Sun Sep 24 17:47:14 EDT 2017 dev/ttt/Game.class
1451 Sun Sep 24 17:47:14 EDT 2017 dev/ttt/Assets.class
503 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/Launcher.class
2874 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/ai/AI.class
456 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/player/Player.class
2875 Sat Sep 23 20:18:30 EDT 2017 dev/ttt/player/MouseInput.class
1010 Sun Sep 24 12:09:46 EDT 2017 images/O.png
1034 Sun Sep 24 12:09:46 EDT 2017 images/X.png
310 Thu Sep 21 12:22:30 EDT 2017 .checkstyle
385 Thu Sep 21 12:26:28 EDT 2017 .project
343 Sat Sep 23 21:03:18 EDT 2017 .classpath