2011-09-13 50 views
-2

我寫了一個小的測試程序,但我遇到了我的結束標記語法錯誤...的Java:請插入「}」來完成classbody

下面的代碼

public class Test 
{ 
    AudioFile file = null; 
    String vbb = ""; 
    File f; 

    public Test() 
    { 
     openFile(); 
    } 

    public File openFile() 
    { 
     JFileChooser fc = new JFileChooser(); 
     fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     int result = fc.showOpenDialog(fc); 
     if(result == JFileChooser.CANCEL_OPTION) 
     { 
      return null; 
     } else { 
      f = fc.getCurrentDirectory(); 
      return f; 
     } 
    } 

    f = new File(openFile()); 
    File[] files = f.listFiles(); 

    for(File fi : files) 
    { 
     try { 
      file = (AudioFile) AudioFileIO.read(new File(fi.getAbsolutePath())); 
      MP3AudioHeader ah = (MP3AudioHeader) file.getAudioHeader(); 
      String time = ah.getTrackLengthAsString(); 
      String rate = ah.getBitRate(); 
      boolean vb = ah.isVariableBitRate(); 
      if(vb == false) 
      { 
       vbb = "Nee"; 
      } else { 
       vbb = "Ja"; 
      } 
      Tag tag = file.getTag(); 
      String artist = tag.getFirst(FieldKey.ARTIST); 
      String title = tag.getFirst(FieldKey.TITLE); 
      String album = tag.getFirst(FieldKey.ALBUM); 
      String genre = tag.getFirst(FieldKey.GENRE); 
      String temo = tag.getFirst(FieldKey.BPM); 
      String path = fi.getAbsolutePath(); 

      System.out.println("Duur: " + time + "\nVariabele bitrate: " + vbb + "\nArtiest: " + artist +"\nTitel: " + title 
        + "\nAlbum: " + album + "\nGenre: " + genre + "\nBPM: " + temo + "\nBitrate: " + rate + " kbps\nPad: " + path); 

     } catch (Exception e) 
     { 
      System.err.print("FOUT"); 
     } 
    } 
} 

編譯器在最新的結束標誌處給出錯誤: 「請插入}以完成課程組」 並且還在最後的「openFile()

+3

把你的代碼放在一個方法裏面,而不是放在類裏面。 –

+1

這看起來並不像現在這樣編譯。這是不正確的Java。 – clvrmnky

+0

'{}'是大括號,而不是標籤。 –

回答

4

如果你有

f = new File ... 
... 
catch (..) 
{ 
    .... 
} 

你想包裝在

public static void main (String args[]) { 
.... 
} 

你不能在一個類中定義的代碼塊。在類的最頂端,這些變量聲明是具有默認可見性的類成員的聲明。

+0

由於OP編寫的代碼的性質,它不屬於'main'方法,而是屬於實例方法或構造方法。 –

+0

我不太確定。從代碼的外觀來看,它應該是一個主要方法。它正在執行塊中的大部分邏輯,並沒有真正返回任何有用的東西。這主要是印刷。我認爲Test構造函數實際上是無關的。 – IslandCow

+0

我並不反對,我只是想說,他寫的方式在主要方法中不起作用:例如,他必須將'f'改爲靜態或局部變量。 –

5
f = new File(openFile()); 
    File[] files = f.listFiles(); 

    for(File fi : files) 
    { 
     //... 
    } 

這整塊邏輯不在方法中。它需要在方法或構造函數中。

3

開始與線路

f = new File(openFile()); 

的所有代碼是任何方法之外。這不是合法的Java:語句必須包含在塊或方法體中。

0

一切下面

public File openFile() 
{ 
    JFileChooser fc = new JFileChooser(); 
    fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
    int result = fc.showOpenDialog(fc); 
    if(result == JFileChooser.CANCEL_OPTION) 
    { 
     return null; 
    } else { 
     f = fc.getCurrentDirectory(); 
     return f; 
    } 
} 

未封裝的方法主體內而是被潛伏在類體。刪除上面的外部大括號。

+0

感謝您的回覆,我將「漫遊」代碼放在了一個方法中,現在它可以工作! – Laurent

0

您的代碼不在方法中。它需要位於方法或靜態塊中。猜你的意圖,你可以把它放在構造函數中,如:

public class Test 
{ 
    AudioFile file = null; 
    String vbb = ""; 
    File f; 

    public Test() 
    { 
     openFile(); 

     f = new File(openFile()); 
     File[] files = f.listFiles(); 

     for(File fi : files) 
     { 
      try { 
       file = (AudioFile) AudioFileIO.read(new File(fi.getAbsolutePath())); 
       MP3AudioHeader ah = (MP3AudioHeader) file.getAudioHeader(); 
       String time = ah.getTrackLengthAsString(); 
       String rate = ah.getBitRate(); 
       boolean vb = ah.isVariableBitRate(); 
       if(vb == false) 
       { 
        vbb = "Nee"; 
       } else { 
        vbb = "Ja"; 
       } 
       Tag tag = file.getTag(); 
       String artist = tag.getFirst(FieldKey.ARTIST); 
       String title = tag.getFirst(FieldKey.TITLE); 
       String album = tag.getFirst(FieldKey.ALBUM); 
       String genre = tag.getFirst(FieldKey.GENRE); 
       String temo = tag.getFirst(FieldKey.BPM); 
       String path = fi.getAbsolutePath(); 

       System.out.println("Duur: " + time + "\nVariabele bitrate: " + vbb + "\nArtiest: " + artist +"\nTitel: " + title 
         + "\nAlbum: " + album + "\nGenre: " + genre + "\nBPM: " + temo + "\nBitrate: " + rate + " kbps\nPad: " + path); 

      } catch (Exception e) 
      { 
       System.err.print("FOUT"); 
      } 
     } 


    } 

    public File openFile() 
    { 
     JFileChooser fc = new JFileChooser(); 
     fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     int result = fc.showOpenDialog(fc); 
     if(result == JFileChooser.CANCEL_OPTION) 
     { 
      return null; 
     } else { 
      f = fc.getCurrentDirectory(); 
      return f; 
     } 
    } 

} 
相關問題