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()方法和类
  • 从最后一行中删除
    }

  • 问题似乎出在大括号上:

  • 在框架后添加两个结尾的大括号
    }
    。添加(面板