Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:请插入“}”&引用;完成类主体_Java_Class_Syntax_Syntax Error - Fatal编程技术网

Java:请插入“}”&引用;完成类主体

Java:请插入“}”&引用;完成类主体,java,class,syntax,syntax-error,Java,Class,Syntax,Syntax Error,我写了一个小测试程序,但是我在结束标记中遇到了语法错误 这是密码 public class Test { AudioFile file = null; String vbb = ""; File f; public Test() { openFile(); } public File openFile() { JFileChooser fc = new JFileChooser();

我写了一个小测试程序,但是我在结束标记中遇到了语法错误

这是密码

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()”方法的最后一次表彰中

有什么建议吗

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

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

整个逻辑块不在方法中。它需要位于方法或构造函数中。

所有代码都以该行开头

f = new File(openFile());
在任何方法之外。这不是合法的Java:语句必须包含在块或方法体中。

f = new File ...
...
catch ( .. )
{
  ....
}
你想把它包起来吗

public static void main (String args[]) {
....
}
类定义中不能有代码块。在类的最顶端,这些变量声明是具有默认可见性的类成员声明。

下面的所有内容

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

不是封闭在方法体中,而是隐藏在类体中。移除上面的外部闭合大括号。

您的代码不在方法中。它需要位于方法或静态块中。猜测您的意图,您可以将其放入构造函数中,如下所示:

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

}

把你的代码放在一个方法中,而不是放在类中。这看起来不像它会按原样编译。这不是正确的Java。@clvrmnky:因此问题是,他在哪里提到他有编译错误?他说了什么让你觉得他是在编译?@markp,这个问题与大括号没什么关系,编译器的错误也很明显。也许我应该说得更清楚一些:“你有没有试着听从编译器的建议?”也就是说,有多个语法错误需要解决,而这些错误与方法在类主体中的方式几乎没有关系。@clvrmnky:你说这个问题与大括号没有什么关系,但是你也说OP应该遵循编译器的建议。根据OP,编译器明确表示大括号(“请插入}…”)有问题,所以我认为您必须选择一个或另一个:-)。当你真正不熟悉一种语言时,有时编译器错误消息看起来就像是在另一种语言中。由于OP编写的代码的性质,它不属于
main
方法,而是一个实例方法或构造函数。我不太确定这一点。从代码的外观来看,它应该是一个主方法。它正在执行块中的大部分逻辑,并没有真正返回任何有用的内容。主要是印刷。我认为测试构造函数实际上是无关的。我并不反对,我只是想说他编写它的方式在主方法中不起作用:例如,他必须将
f
更改为静态或局部变量。是的,从外观上看,他并没有编写类,而只是在Java中编写他/她想要的一些功能。也许,所有的方法和变量都应该是静态的。谢谢你的回复,我已经在一个方法中加入了“漫游”代码,现在它可以工作了!