目前我正在制作的项目是用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
的文件夹答案 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");
这意味着它是从源文件夹而不是整个计算机路径看,感谢所有其他帮助过的人。