我创建了一个快速小小程序来播放音频剪辑,但截至目前,没有骰子。 我不知道为什么,文件的路径是正确的。我究竟做错了什么? 这是代码
import javax.swing.JApplet;
import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;
public class PlayAudioClippls extends JApplet {
private URL soundToPlay = getClass().getResource("C:\\Users\\Brian Murphy\\workspace\\FlagsSOUND\\anthem_mid files\\anthem6.mid");
private AudioClip AC = Applet.newAudioClip(soundToPlay);
public void init()
{
AC.play();
}
}
这是例外列表
java.lang.NullPointerException
at sun.applet.AppletAudioClip.<init>(Unknown Source)
at java.applet.Applet.newAudioClip(Unknown Source)
at PlayAudioClippls.<init>(PlayAudioClippls.java:10)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
答案 0 :(得分:0)
[...]文件的路径是正确的。我做错了什么?
文件的路径不正确,因为您提供了相对于机器文件系统的路径,而Class.getResource()
[通常]需要相对于其中一个路径的路径applet的类路径中的目录。您收到NullPointerException
,因为由于该问题,您的getResource()
来电会返回null
。
注意:它只是间接地是文件位置的问题。 主要是如何表达它的路径的问题。您可以将文件放在applet的类路径(可能是C:\Users\Brian Murphy\workspace\PlayAudioClippls\bin
)上的目录中,也可以放在这样一个目录下的某个子目录中。前者比后者稍微容易一些。在这种情况下,你会想要这个:
private URL soundToPlay = getClass().getResource("/anthem6.mid");
“相对于类路径中的目录”意味着您只指定相关类路径目录后面的路径部分。如果你愿意,这可以包括子目录,这样applet的资源就不必全部出现在它的jar的根目录中。