Достигнут конец файла во время разбора - PullRequest
0 голосов
/ 13 марта 2012

Я продолжаю получать это сообщение, когда пытаюсь скомпилировать: Достигнут конец файла при разборе Кто-нибудь знает почему?Единственное, что я понял, это то, что это как-то связано с моими фигурными скобками.Я пытался переместить скобки, добавить их и удалить их, но я не могу понять это.Ошибка возникает в последней строке кода.

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

                }
            }

        }

    }
}       
}

}

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Да, у вас недостаточно закрывающих скобок.

Одна большая путаница заключается в том, что весь ваш код находится в одном методе (main), который, в свою очередь, содержит класс локального метода(CalculateListener) длиной 80 строк.

Вы подразумевали , что это класс локального метода?Есть ли какая-то причина, по которой вы хотите, чтобы был классом для локального метода? Вы просто забыли "закрыть" свой метод main?Похоже, вы даже не используете CalculateListener в любом случае или делаете что-либо с JFrame, который создает main.

Если вы попросите свою 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");
        }
    }
}
0 голосов
/ 13 марта 2012

Кажется, проблема в фигурных скобках:

  1. Добавьте 2 конечных фигурных скобки } после frame.add(panel);, чтобы закрыть метод main () и класс
  2. Remove } с последней строки
...