1

我正在做一个纸牌游戏,它几乎完成了。我想做的最后一件事是播放一些背景音乐。现在如果我将文件复制到默认包中并制作一个游戏的jar文件,音乐会在所有计算机上播放吗?目前,在我的电脑上,它通过为文件提供特定路径(如"C:\\samp.wav";. 但我担心如果我制作一个 jar 文件并在另一台 PC 上运行它,它将无法正常工作。我想会有一个FileNotFoundException。我是对还是错?

对于卡片的图像,我正在使用这一行:

jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/1.jpg")));

我已经插入到我的默认包中的那些图片。我想对音乐文件做同样的事情,但是怎么做呢?我正在使用 NetBeans。

4

2 回答 2

1

您应该在应用程序 jar 中包含 wav 文件。这样您就不必管理用户文件系统中的文件副本(请记住,例如,在 UNIX、Mac 等中,您无法通过 访问硬盘驱动器C:/...)。

例如,如果您将 wav 文件放在 app jar ( app.jar/samp.wav) 的根目录中:

InputStream is = getClass().getClassLoader().getResourceAsStream("samp.wav");

或者,如果您在应用程序 jar 根目录 ( app.jar/sounds/samp.wav) 中有一个“声音”目录:

InputStream is = getClass().getClassLoader().getResourceAsStream("sounds/samp.wav");

查看这篇文章以获取有关使用 Java 播放 wav 文件的更多信息(尽管对于您的问题,我认为您已经解决了这个问题)。考虑在单独的线程中播放它。另请查看此网站以获取有关在 Java 中管理媒体文件的示例。

于 2012-11-26T21:21:44.513 回答
0
import javax.swing.*;
import sun.audio.*;
import java.awt.event.*;
import java.io.*;
public class Sound {
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setSize(200,200);
JButton button = new JButton("Click me");
frame.add(button);
button.addActionListener(new AL());
frame.setVisible(true);
}
public static class AL implements ActionListener{
public final void actionPerformed(ActionEvent e){
music();
}
}
public static void music(){
AudioPlayer MGP = AudioPlayer.player;
AudioStream BGM;
AudioData MD;
ContinuousAudioDataStream loop = null;
try{
BGM = new AudioStream(new FileInputStream("C:\\test\\ha.wav"));
MD = BGM.getData();
loop = new ContinuousAudioDataStream(MD);
}catch(IOException error){
System.out.print("file not found");
}
MGP.start(loop);
}
}
于 2013-09-18T04:47:35.593 回答