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中编写他/她想要的一些功能。也许,所有的方法和变量都应该是静态的。谢谢你的回复,我已经在一个方法中加入了“漫游”代码,现在它可以工作了!