2013-03-16 106 views
0

在java中我編寫了一個小程序播放音頻文件和播種圖片:
首先,我做了一個最終字符串的路徑,然後我做了一個文件對象。
至少我將返回的數組保存在我的「軌道」變量中。 這是我的代碼:
Java不讀取相對路徑的圖片和音頻文件

private static final String PATH = "../src/audio/"; 
private static final File FILE = new File(PATH); 
tracks = liesAudioDateien(file); 

private AudioClip[] liesAudioDateien (File inputFile) { 
    File[] dateFileArray; 
    AudioClip[] tracks; 
    dateFileArray = inputFile.listFiles(); 
    tracks = new AudioClip[dateFileArray.length]; 
    for (int i = 0; i < tracks.length; i++) { 
     if (dateFileArray[i].isFile()) { 
      try { 
       tracks[i] = Applet.newAudioClip(dateFileArray[i].toURL()); 
      } catch (IOException ex) { 
       System.err.println("Oops!: -- " + ex.toString()); 
      } 
     } 

    } 
    return tracks; 

如果我運行此代碼,我得到一個錯誤:

Exception in thread "main" java.lang.NullPointerException 
    at source.Sound.liesAudioDateien(Sound.java:32) 

Sound.java:32:
這是tracks = new AudioClip[dateFileArray.length];線。

如果我嘗試使用絕對路徑,它確實可行! 我做錯了什麼?

+0

Windows還是Linux? – longhua 2013-03-16 17:40:28

+0

起初只適用於Windows。 – Hydroid 2013-03-16 18:57:05

回答

0

變化"../src/audio/""./src/audio/"

+0

是的,它可以在NetBeans中工作,但如果我製作一個jar,它就不起作用。 :( – Hydroid 2013-03-16 18:51:50

+0

確保在製作jar的時候(如果你用jar打包)用ClassName.class.getResourceAsStream(fileName)讀取這個文件 – Sach 2013-03-16 18:54:57

+0

你能解釋一下你的答案嗎我是一個新的java程序員 – Hydroid 2013-03-16 19:51:05

0

您的路徑是相對的,它被解析爲相對於當前工作目錄。當前的工作目錄不是你想象的那樣。

試着在inputFile.listFiles()之前這樣做;

System.out.println(inputFile.getAbsolutePath()); 

,看看Java的認爲絕對路徑應該是。

+0

謝謝,你的回答非常有幫助!我今天嘗試! – Hydroid 2013-03-16 18:55:19

0

File.listFiles返回null如果抽象路徑名不表示一個目錄。

你需要確保inputFile表示一個目錄,以確保dateFileArraynull

0

用File.separator替代正向/反向斜槓來嘗試。 ex:

String soundDir = "." + File.separator + "folderName" + File.separator; 
String fileName = "sound.wav"; 
String filePath = soundDir+ + fileName;