我正在尝试在Mac上打开文件。该文件位于主文件包的外部。我收到错误
Exception in thread "main" java.lang.NullPointerException
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"WAV files", "wav");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(yourJFrame);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
File file = chooser.getSelectedFile();
String fullPath = file.getAbsolutePath();
>> AudioClip clip = Applet.newAudioClip(Main.class.getResource(fullPath));
clip.play();
错误标有>>
答案 0 :(得分:0)
请尝试执行此操作:
URL url = file.toURI().toURL()
AudioClip clip = Applet.newAudioClip( url );
Class.getResource有点问题,它默认情况下假设路径是相对的,并且在某种程度上取决于所使用的类加载器。
您还确定已选择文件,您的if语句仅包装println而不包装其余功能,这意味着如果未选择文件,则可能还会出现空指针。尽管NPE会在上面的行中发生。
此外,我还要避免使用AWT,因为它已被swing取代,而它本身已被javafx取代。
答案 1 :(得分:0)
Class.getResource的参数不是文件名。这是一个相对URL,其基础是类路径中每个条目的根。 getResource可以从不检索类路径之外的文件。由于您的文件名不是相对于类路径根目录的有效URL,因此getResouce方法返回null(作为documented)。
您可以按照Jack Moxley的建议进行操作,然后将文件正确转换为URL。
但是,the Applet class is deprecated。您应该使用javax.sound.sampled package播放声音:
try {
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(file));
clip.start();
} catch (UnsupportedAudioFileException | LineUnavailableException | IOException e) {
throw new RuntimeException(e);
}
答案 2 :(得分:-1)
此字符串正常工作吗?
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());