可运行的jar可以很好地运行java -jar,但双击有问题



我正在使用eclipse IDE,我刚刚使用'export->Runnable Jar'导出了我的项目。在我的代码中,我使用

加载了一个映射
URL map1url = this.getClass().getResource("map01.txt");

和之后的

inputmap = new File(map1url.getFile());

,然后使用

扫描其数据
Scanner sc = null;
    try {
        sc = new Scanner(inputmap);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

现在,当我将map01.txt打包到jar中并双击它时,它运行了,但是找不到map01.txt。当我使用java -jar时,它运行了,但仍然找不到地图。当我将map01.txt放在与jar文件相同的目录中,但实际上不在jar中,然后双击它,它运行,但没有找到映射。如果我使用java -jar运行它,它会运行并加载映射。这个问题的原因是什么?我该怎么修理它?map01.txt是唯一不能工作的资源。我已经加载了许多放在jar文件中的图像,它们都加载和显示得很好。对于图像,我使用

URL url = this.getClass().getResource("myImage.gif");
    try {
        BufferedImage myImage = ImageIO.read(url);
    } catch (IOException e) {
    }    

为什么他们工作,而不是我的地图?我如何解决这个问题,以便我可以将所有资源打包到一个jar中,然后双击它来运行?

当您说"new File(map1url.getFile())"时,您将得到一个java.io.File,它指向当前目录中的一个文件。如果文件实际上在进程的当前目录中(如果文件在shell的当前目录中并且使用"java -jar",则会发生这种情况),那么这将工作;否则,它不会。

为什么不直接使用getResource().openStream()来读取map文件?

最新更新