我尝试导入我的蚂蚁脚本。它成功了。但是当我编译它时。我收到了这个错误:
run-selected-file-in-src:
java.io.FileNotFoundException: ..\sounds\voice.wav (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at com.sun.media.sound.WaveFileReader.getAudioInputStream(WaveFileReader.java:205)
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1162)
at SimpleSoundPlayer.<init>(SimpleSoundPlayer.java:35)
at SimpleSoundPlayer.main(SimpleSoundPlayer.java:12)
Exception in thread "main" java.lang.NullPointerException
at java.io.ByteArrayInputStream.<init>(ByteArrayInputStream.java:89)
at SimpleSoundPlayer.main(SimpleSoundPlayer.java:16)
D:\Windows\My Document\Latihan\Java\allsrc\ch04src\nbproject\ide-file-targets.xml:7: Java returned: 1
BUILD FAILED (total time: 0 seconds)
这是我的文件夹结构
root
+-build(all *.class store here)
+-images
+-nbproject(netbeans create it)
+-sounds(voice.wav where i want to load)
+-src(all *.java - When i compile. All *.class will store to "build" folder)
+-build.xml
我的问题是为什么类文件(SimpleSoundPlayer.class)没有找到“.. \ sounds \ voice.wav”。但是当我从命令行“java SimpleSoundPlayer”尝试它时很好。
为什么会这样?
答案 0 :(得分:0)
这是因为您使用相对路径加载文件:..\sounds\voice.wav
。执行此操作时,您的应用程序非常脆弱,因为它必须从特定目录启动才能正常工作。
我怀疑NetBeans从根文件夹启动您的应用程序,而不是从src或build文件夹启动它。
我建议将voice.wav放入您的源代码中,以便将它与类文件一起复制到构建目录中。然后,您可以使用类加载器加载文件,这要归功于对Class.getResourceAsStream()的调用。
答案 1 :(得分:0)
我想通了! 特别感谢“JB Nizet”。因为他我知道它为什么没有找到wav文件。所以我只是搜索如何更改默认位置(在root中的这种情况)netbeans进行编译(我希望netbeans从“build”文件夹编译)。
密钥位于nbproject / ide-file-target.xml
中root
+-build(all *.class store here)
+-images
+-nbproject(netbeans create it)
+-sounds(voice.wav where i want to load)
+-src(all *.java - When i compile. All *.class will store to "build" folder)
+-build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="../build" name="chap04 - Sound Effects and Music-IDE">
<!-- TODO: edit the following target according to your needs -->
<!-- (more info: http://www.netbeans.org/kb/41/freeform-config.html#runsingle) -->
<target name="run-selected-file-in-src">
<fail unless="run.class">Must set property 'run.class'</fail>
<java classname="${run.class}" failonerror="true" fork="true">
<classpath>
<pathelement path="build"/>
<pathelement location="."/>
</classpath>
</java>
</target>
所以我只需将<project basedir=".."
更改为<project basediir="../build"
,我希望netbeans可以编译。通过此更改,netbeans将在“build”文件夹中编译该文件。 AND ... WOWWW ...该文件正确运行:D