2011-02-18 51 views
0

我試圖導入我的ant腳本。它成功了。但是當我編譯它。我得到這個錯誤:在Netbeans 6.1中運行Ant腳本的問題

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)沒有找到 「.. \聲音\ voice.wav」 。但是,當我嘗試從命令行「java SimpleSoundPlayer」它很好。

爲什麼會發生這種情況?

回答

0

我想出來!!! 特別thx「JB Nizet」。因爲他知道爲什麼它沒有找到wav文件。所以我只是搜索如何更改默認位置(這種情況下的根)netbeans編譯(我想NetBeans從「生成」文件夾編譯)。

關鍵是在nbproject文件/ IDE-文件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」文件夾中編譯該文件。和... WOWWW ...該文件正確運行:D

0

發生這種情況是因爲您使用相對路徑加載文件:..\sounds\voice.wav。當你這樣做時,你的應用程序非常脆弱,因爲它必須從特定的目錄啓動才能正常工作。

我懷疑NetBeans從根文件夾啓動您的應用程序,而不是從src或build文件夾啓動它。

我建議將voice.wav放在源代碼中,以便將它複製到構建目錄以及類文件中。然後,您可以使用類加載器加載文件,這要感謝Class.getResourceAsStream()

+0

嗯... Thx爲您的重播。你有另一種解決方案來保持我的「聲音」文件夾在根?我的意思是不動它。這有可能嗎? – Kenjiro 2011-02-18 13:13:57