Parsing 解析时已到达文件结尾
当我尝试编译时,我不断收到以下消息: 解析时已到达文件结尾 有人知道为什么吗?我唯一发现的是这和我的卷发背带有关。我尝试过移动大括号、添加大括号和删除大括号,但我无法解决这个问题。错误发生在最后一行代码中Parsing 解析时已到达文件结尾,parsing,braces,Parsing,Braces,当我尝试编译时,我不断收到以下消息: 解析时已到达文件结尾 有人知道为什么吗?我唯一发现的是这和我的卷发背带有关。我尝试过移动大括号、添加大括号和删除大括号,但我无法解决这个问题。错误发生在最后一行代码中 import java.awt.event.ActionEvent; //Next group of lines import various Java classes import java.awt.event.ActionListener; import javax.swing.JButt
import java.awt.event.ActionEvent; //Next group of lines import various Java classes
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.GridLayout;
import java.text.*;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ReadTextFile extends JFrame
{
public static void main(String[] args) throws IOException {
//Creates Window
final JFrame frame = new JFrame();
frame.setSize(450, 300); //Sets size of the window
frame.setTitle("Read a Text File"); //Adds title to the GUI
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create labels and fields
JLabel Firstlbl = new JLabel("First Text Line");
final JTextField FirstField = new JTextField(20);
FirstField.setText("1st");
JLabel Secondlbl = new JLabel("Second Text Line");
final JTextField SecondField = new JTextField(20);
SecondField.setText("2nd");
JLabel Thirdlbl = new JLabel("Third Text Line");
final JTextField ThirdField = new JTextField(20);
ThirdField.setText("3rd");
JLabel ButtonLabel = new JLabel("Click button to read text from file.");
final JButton button = new JButton("Click Here");
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4,2));
panel.add(ButtonLabel);
panel.add(button);
panel.add(Firstlbl);
panel.add(FirstField);
panel.add(Secondlbl);
panel.add(SecondField);
panel.add(Thirdlbl);
panel.add(ThirdField);
frame.add(panel);
class CalculateListener implements ActionListener {
private boolean readFile(String fileName)
{
boolean flag = true;
try{
//initialize the file object
BufferedReader reader=new BufferedReader(new FileReader(fileName));
String line;
int counter = 0;
//reading the lines
while((line = reader.readLine()) != null)
{
counter++;
}
reader.close();
//if file has less then 6 line
if(counter<6)
{
//return the message
JOptionPane.showMessageDialog(this, "Error: This must have minimum 6 lines\nEnter another file name and try again.", "FILE LINES ERROR", JOptionPane.ERROR_MESSAGE);
flag = false;
}
if(flag){
//initialize the array wtih line counter
lines = new String [counter];
reader=new BufferedReader(new FileReader(fileName));
//reading the lines
counter =0;
while((line = reader.readLine()) != null)
{
//set the array elements with the lines of the file
lines[counter++] = line;
}
reader.close();
}
}
catch(IOException ioe) //exception if any
{
JOptionPane.showMessageDialog(this, "Error"+ioe.getMessage(), "FILE READING ERROR", JOptionPane.ERROR_MESSAGE);
}
catch(Exception e) //exception if any
{
JOptionPane.showMessageDialog(this, "Error"+e.getMessage(), "GENERAL ERROR", JOptionPane.ERROR_MESSAGE);
}
return flag;
}
//method to handle action of button
public void actionPerformed (ActionEvent ae)
{
if(ae.getSource()== displayButton)
{
resultTextArea.setText("");
String fileName = "input.txt";
//call the function readFile() with file name
if(readFile(fileName))
{
for(int i=0; i< lines.length; i++)
{
if(i%2==0)
{
//display the array elements to text area
resultTextArea.append(lines[i]+"\n");
}
}
}
}
}
}
导入java.awt.event.ActionEvent//下一组行导入各种Java类
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JCheckBox;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入java.awt.GridLayout;
导入java.text.*;
导入java.io.IOException;
导入java.io.FileInputStream;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.nio.ByteBuffer;
导入java.nio.channels.FileChannel;
公共类ReadTextFile扩展了JFrame
{
公共静态void main(字符串[]args)引发IOException{
//创建窗口
最终JFrame=新JFrame();
frame.setSize(450300);//设置窗口的大小
frame.setTitle(“读取文本文件”);//向GUI添加标题
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//创建标签和字段
JLabel Firstlbl=新的JLabel(“第一个文本行”);
最终JTextField FirstField=新JTextField(20);
FirstField.setText(“第一”);
JLabel Secondlbl=新的JLabel(“第二个文本行”);
最终JTextField SecondField=新JTextField(20);
SecondField.setText(“第二”);
JLabel Thirdlbl=新的JLabel(“第三个文本行”);
最终JTextField ThirdField=新的JTextField(20);
第三字段设置文本(“第三”);
JLabel ButtonLabel=新的JLabel(“单击按钮从文件中读取文本”);
最终JButton按钮=新JButton(“单击此处”);
JPanel面板=新的JPanel();
面板设置布局(新网格布局(4,2));
面板。添加(按钮标签);
面板。添加(按钮);
面板。添加(第一个LBL);
面板。添加(第一个字段);
面板。添加(第二个LBL);
panel.add(第二个字段);
增补(第三条);
添加面板(第三个字段);
框架。添加(面板);
类CalculateListener实现ActionListener{
私有布尔读取文件(字符串文件名)
{
布尔标志=真;
试一试{
//初始化文件对象
BufferedReader reader=新的BufferedReader(新文件读取器(文件名));
弦线;
int计数器=0;
//读台词
而((line=reader.readLine())!=null)
{
计数器++;
}
reader.close();
//如果文件的行数少于6行
如果(counter是,您没有足够的右大括号
一个主要的混淆点是,所有代码都在一个方法(main
)中,而该方法又包含一个80行长的方法本地类(CalculateListener
)
你的意思是要成为一个方法本地类吗?你有什么理由想让它成为一个方法本地类吗?你真的忘记了“关闭”你的main
方法吗?你甚至似乎根本没有使用CalculateListener
或者用main
创建的JFrame
做任何事情
如果您要求IDE为您缩进代码,当您遇到此类问题时,应该非常清楚。此外,缩短方法并尝试减少缩进会有所帮助。例如,在actionPerformed
方法中,整个方法都在一个If
块中。如果您只是反转通过该if
的逻辑,您可以保存一个嵌套级别。然后您也可以对下一个if
块执行相同的操作:
public void actionPerformed (ActionEvent ae)
{
if (ae.getSource() != displayButton)
{
return;
}
resultTextArea.setText("");
if (!readFile("input.txt"))
{
return;
}
for (int i=0; i < lines.length; i++)
{
if (i % 2 == 0)
{
// display the array elements to text area
resultTextArea.append(lines[i]+"\n");
}
}
}
public void actionPerformed(ActionEvent ae)
{
如果(ae.getSource()!=displayButton)
{
返回;
}
resultTextArea.setText(“”);
如果(!readFile(“input.txt”))
{
返回;
}
对于(int i=0;i
是的,您没有足够的右大括号
一个主要的混淆点是,所有代码都在一个方法(main
)中,而该方法又包含一个80行长的方法本地类(CalculateListener
)
你的意思是要成为一个方法本地类吗?你有什么理由想让它成为一个方法本地类吗?你真的忘记了“关闭”你的main
方法吗?你甚至似乎根本没有使用CalculateListener
或者用main
创建的JFrame
做任何事情
如果您要求IDE为您缩进代码,当您遇到此类问题时,应该非常清楚。此外,缩短方法并尝试减少缩进会有所帮助。例如,在actionPerformed
方法中,整个方法都在一个If
块中。如果您只是反转通过该if
的逻辑,您可以保存一个嵌套级别。然后您也可以对下一个if
块执行相同的操作:
public void actionPerformed (ActionEvent ae)
{
if (ae.getSource() != displayButton)
{
return;
}
resultTextArea.setText("");
if (!readFile("input.txt"))
{
return;
}
for (int i=0; i < lines.length; i++)
{
if (i % 2 == 0)
{
// display the array elements to text area
resultTextArea.append(lines[i]+"\n");
}
}
}
public void actionPerformed(ActionEvent ae)
{
如果(ae.getSource()!=displayButton)
{
返回;
}
resultTextArea.setText(“”);
如果(!readFile(“input.txt”))
{
返回;
}
对于(int i=0;i
问题似乎出在大括号上:
在frame.Add(panel);
之后添加两个结尾的大括号}
,以关闭main()方法和类
从最后一行中删除}
问题似乎出在大括号上:
在框架后添加两个结尾的大括号}
。添加(面板