Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 导出时更改文件路径_Java_Swing_Jar_Exe_Embedded Resource - Fatal编程技术网

Java 导出时更改文件路径

Java 导出时更改文件路径,java,swing,jar,exe,embedded-resource,Java,Swing,Jar,Exe,Embedded Resource,我目前正在尝试开发一个游戏,当我导出它时,文件路径正在改变 代码如下: package random; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JFrame; public class Troll extends JFrame{ /** *

我目前正在尝试开发一个游戏,当我导出它时,文件路径正在改变

代码如下:

package random;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Troll extends JFrame{
    /**
     * 
     */
    private static final long serialVersionUID = 4176461585360667597L;
    public static BufferedImage img;
    public static void main(String[] args){
        File f = new File("troll.png");
        try{
            if(f.exists()){
                System.out.println("ITS THERE! :D");
                   img = ImageIO.read(f);
            } else {
                System.out.println("DOESNT EXIST, REAL PATH IS: " + f.getAbsolutePath() );
            }
        }catch(Exception e){
            e.printStackTrace();
        }

        new Troll();

    }
    public Troll(){
        init();
    }
    public void init(){
        setSize(1200,800);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }
    public void paint(Graphics g){
        g.drawImage(img, 500, 350, this);
    }
}
当我通过Eclipse(我正在使用的IDE)运行它时,它运行良好,并且显示了图像。当我将其导出为jar并使用Jar2Exe软件将其转换为exe时,图像不会出现,并且在控制台中显示图像的绝对路径在我的桌面上。但是,当我使用7-Zip打开exe时,图片就在exe中


我怎样才能导出它,以便当用户运行它时,程序可以找到文件路径并显示图像,而不是认为它在我的桌面上?

我希望这不是一个巨魔(lol)

您在一个jar中,没有资源文件


请参见该链接:


如果您想将其发布为jar,那么需要使用特定于jar的API来读取文件。请参阅示例(您需要配置Eclipse将图片放入jar中,听起来您已经在这样做了)


另外,您应该让我们知道它在jar中是否工作,而不是作为exe,这将帮助我们缩小问题的范围。

对于java的整个部分、文件等,您可能有点陌生,所以您可以给我举个例子吗?你链接到我的那篇文章的答案是使用getResourceAsStream(),但它不起作用。除非我走错路了…我可能只是有一个愚蠢的时刻,但当它在罐子里时,你是什么意思让你知道它是否有效?你的意思是把它当作罐子来运行…?是的,我的意思是把它当作罐子来运行。如下所示:java-jar myfile.jar该示例正是chikincrow在下面所建议的。我尝试使用它,但仍然不会显示为exe。请尝试以下方法:Thread().currentThread().getContextClassLoader().getResource(“hello/yes.gif”);这两个答案都提到了这一点,但更进一步:应用程序资源将在部署时成为嵌入式资源,因此现在就开始像访问它们一样访问它们是明智的。必须通过URL而不是文件访问。有关如何形成URL的信息,请参见。
img = ImageIO.read(this.getClass().getResource("/troll.jpg"));
Thread.currentThread().getContextClassLoader().getResource("hello/yes.gif");