Java中图像和声音的相对路径

时间:2016-07-23 09:39:41

标签: java

目前我正在制作的项目是用Jframe / Jpanel制作的游戏。我通过以下方式使用图像和声音导入:

图片:

    ImageIcon a = new ImageIcon("C:/Users/Home/IdeaProjects/Game/src/DragonRoll/sprites/user_sprite_down.png");
    player = a.getImage();
    //sign

声音:

    String gongFile = ("C:/Users/Home/IdeaProjects/Game/src/DragonRoll/music/game_track.wav");
    InputStream in = new FileInputStream(gongFile);
    AudioStream audioStream = new AudioStream(in);
    AudioPlayer.player.start(audioStream);

可以看到示例中的图像和音轨是从直接路径导入的,而不是相对的路径,这意味着它在其他计算机或设备上不起作用,因为它们没有完全相同的路径。有人可以推荐任何解决方案,请提供示例代码。我试过删除路径,除了包含图像的文件夹和图像名称本身,但是没有用。

我正在使用Intellij并作为可执行的java文件运行。 包含所有项目的文件夹也是如下: - 主项目文件夹 - 分支到.idea,out和src - src包含游戏类和2个名为images and music

的文件夹

3 个答案:

答案 0 :(得分:0)

按照惯例,Java项目中的源文件(以.java结尾的所有内容)应位于名为src/main/java的文件夹中。图像,音频文件,默认配置文件等资源通常放在名为src/main/resources的第二个源文件夹中。这样,编译的源(即.class文件)和资源文件将在应用程序运行时位于类路径上。

要从类路径中加载src/main/resources/DragonRole/music/game_track.wav资源,您只需执行以下操作:

InputStream gameTrackIn = MyClass.class.getResourceAsStream(
     "/DragonRole/music/game_track.wav");

要从类路径加载src/main/resources/DragonRoll/sprites/user_sprite_down.png资源,您只需执行以下操作:

ImageIcon userSpriteDownImg = new ImageIcon(MyClass.class.getResource(
     "/DragonRoll/sprites/user_sprite_down.png"));

您的项目结构应如下所示:

Game (project root)
  └ src/main
     ├ java (source root)
     └ resources (resource root)

答案 1 :(得分:0)

根据您的评论回复,我建议您将资源文件放在jar中。 之后,可以通过以下方式访问资源文件:YourClass.class.getResource("sun.png") 如果文件位于正确的位置。

您现在的主要任务是将资源文件放在方便的位置,并确保您构建允许使用预期目录中的预期文件创建JAR。 你似乎没有使用Maven。这不是先决条件,但可以轻松创建罐子 这是一个常见的问题。你应该找到一些很好的例子。

答案 2 :(得分:0)

结束使用:

ImageIcon c = new ImageIcon("src/main/resources/sprites/new_background_panel.png");

这意味着它是从源文件夹而不是整个计算机路径看,感谢所有其他帮助过的人。