2016-07-23 25 views
0

当前我制作的项目是使用Jframe/Jpanel制作的游戏。我使用的图片的进口和声音通过:Java中的图像和声音的相对路径

图片:

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,并SRC - src包含游戏类和2个文件夹叫图像和音乐

+0

你使用JAR吗?你想在哪里存储你的资源文件?在你的程序中?在一个共同的目录中?在一个相对的目录? – davidxxx

+0

我有项目文件本身和src文件里面我有我的课,然后在src里面我也有2个文件夹一个用于图像,另一个用于声音 – Taka

+0

是的,但是你必须创建一个可执行文件来执行这个项目您的开发环境,如JAR。 你的前端api是什么? – davidxxx

回答

0

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

加载例如从classpath中src/main/resources/DragonRole/music/game_track.wav资源,你可以简单地这样做:

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

加载从您的classpath中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) 
+0

因此我将所有在DragonRoll中的类移动到src中的main文件夹中?我的理解是否正确,如果是的话,我会将这些课程从文件夹DragonRoll中移出并放入主文件夹中,或者放到名为DragonRoll的整个文件夹中。 – Taka

+0

http://imgur.com/a/H8gyx那样? – Taka

+0

是的,看起来不错。但是,您需要确保在IntelliJ中将'java'文件夹标记为“Source Root”并将'resources'文件夹标记为“Resource Root”,而不是'src'文件夹。 – dpr

0

根据你的评论回复,我建议你将你的资源文件放入jar中。 之后,访问资源文件可以这样完成:YourClass.class.getResource("sun.png")如果文件位于正确的位置。

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

+0

http://imgur.com/a/H8gyx类似的东西? – Taka

+0

是的,但我没有看到你的pom.xml。如果你不了解Maven,花点时间了解它的工作。 – davidxxx

+0

pom的用途是什么?以及我将如何创建一个 – Taka

0

最终使用:

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

这意味着它从源文件夹中寻找,而不是整个电脑路径,感谢所有的人谁帮助了。

+0

当构建它时它不起作用 – Taka