Java: пожалуйста, введите "}" для завершения - PullRequest
0 голосов
/ 13 сентября 2011

Я написал небольшую тестовую программу, но у меня есть синтаксическая ошибка в моих закрывающих тегах ...

Вот код

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");
        }
    }
}

Компилятор выдает ошибку при ПОСЛЕДНЕМ закрытии: "Пожалуйста, введите}, чтобы завершить classbody" А также при последней награде метода "openFile ()" ...

Есть предложения?

Ответы [ 5 ]

5 голосов
/ 13 сентября 2011
    f = new File(openFile());
    File[] files = f.listFiles();

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

Весь этот блок логики не в методе. Он должен быть в методе или конструкторе.

4 голосов
/ 13 сентября 2011

Где у вас есть

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

Вы хотите заключить это в

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

У вас не может быть блока кода в определении класса.В самом верху класса эти объявления переменных являются объявлениями членов класса с видимостью по умолчанию.

3 голосов
/ 13 сентября 2011

Весь код начинается со строки

f = new File(openFile());

вне любого метода. Это недопустимая Java: операторы должны быть заключены в тело блока или метода.

0 голосов
/ 13 сентября 2011

Ваш код не в методе.Это должно быть в методе или статическом блоке.Угадывая свое намерение, вы можете поместить его в конструктор как:

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;
        }
    }

}
0 голосов
/ 13 сентября 2011

все ниже

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;
    }
}

не заключено в тело метода, а скорее скрывается в теле класса.Снимите внешнюю закрывающую скобу выше.

...