Сообщение об ошибке «не зарегистрированное исключение java.io.IOException; должно быть перехвачено или объявлено как выброшенное» - PullRequest
23 голосов
/ 03 января 2012

Ошибка:

filecontent.java: 15: незарегистрированное исключение java.io.IOException;должен быть пойман или объявлен брошенным

showfile ();^ filecontent.java:78: незарегистрированное исключение java.io.IOException;должен быть пойман или объявлен брошенным

showfile ();^

Я уже выбросил java.io.IOException, но все равно он показывает эти ошибки.

Мой код:

import java.awt.*;
import java.awt.event.*;
import java.io.*;

class filecontent extends Frame implements ActionListener
{
    TextField t[] = new TextField[4];
    TextArea ta[] = new TextArea[4];
    Button submit;
    Panel p1;
    filecontent()
    {
        setGUI();
        setRegister();
        showfile();
        setTitle("FileData");
        setVisible(true);
        setSize(300, 300);
        /*  addWindowListener(new WindowAdapter()
            { 
                public void windowClosing(WindowEvent we)
                { 
                    System.exit(0); 
                }
            }); 
        */

    }

    void setGUI()
    {
        p1 = new Panel();
        p1.setLayout(new GridLayout(5, 4, 10, 10));
        for(int i=0; i<4; i++)
        {
            t[i] = new TextField(10);
            ta[i] = new TextArea("");
            p1.add(t[i]);
            p1.add(ta[i]);
        }
        submit = new Button("Submit");
        p1.add(submit);
    }

    void setRegister()
    {
        submit.addActionListener(this);
    }

    void showfile() throws java.io.IOException
    {
        FileReader fin[] = new FileReader[4];
        FileReader fn;
        //   br[]=new BufferedReader[4];

        for(int i=0;i<4;i++)
        {
            fin[i]=new FileReader(t[i].getText());
        }
        int cnt = 1;
        String s;
        fn = fin[0];
        BufferedReader br = new BufferedReader(fn);
        while(cnt <= 4)
        {
            if((s=br.readLine()) != null)
            {
                ta[cnt-1].append(s+"");
            }
            else
            {
                cnt++;
                fn = fin[cnt-1];
                ta[cnt-1].setText("");
            }
        }
    }

    public void actionPerformed(ActionEvent ae)
    {
        if(ae.getSource()==submit)
        {
            showfile();
        }
    }

    public static void main(String ar[])
    {
        new filecontent();
    }
}

Ответы [ 5 ]

46 голосов
/ 03 января 2012
void showfile() throws java.io.IOException  <-----

Ваш метод showfile() выдает IOException, поэтому всякий раз, когда вы его используете, вы должны либо перехватить это исключение, либо снова его обработать.Что-то вроде:

try {
  showfile();
}
catch(IOException e) {
  e.printStackTrace();
}

Вы должны узнать о исключениях в Java .

8 голосов
/ 03 января 2012

Сообщение об ошибке означает, что любой метод, который вызывает showfile(), должен либо объявить, что it , в свою очередь, выбрасывает IOException, либо вызов должен быть внутри блока try, который перехватывает IOException. Когда вы звоните showfile(), вы не делаете ни того, ни другого; например, ваш конструктор filecontent не объявляет IOException и не содержит блок try.

Намерение состоит в том, что какой-нибудь метод, где-нибудь, должен содержать блок try, и перехватывать и обрабатывать это исключение. Компилятор пытается заставить вас обработать исключение где-то.

Кстати, этот код (извините за грубость) ужасен . Вы не закрываете файлы, которые открываете, BufferedReader всегда указывает на первый файл, хотя вы, кажется, пытаетесь указать его на другой, циклы содержат ошибки «один за другим», которые вызывают различные исключения и т. д. Когда вы делаете для компиляции, оно будет не работать так, как вы ожидаете. Я думаю, тебе нужно немного помедленнее.

7 голосов
/ 03 января 2012

Исключения всплывают в стеке.Если вызывающая сторона вызывает метод, который генерирует проверенное исключение, такое как IOException, он также должен либо перехватить исключение, либо сам выбросить его.

В случае первого блока:

filecontent()
{
    setGUI();
    setRegister();
    showfile();
    setTitle("FileData");
    setVisible(true);
    setSize(300, 300);

    /*
        addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent we)
            {
                System.exit(0);
            }
        });
    */
}

Вы должны будете включить блок try catch:

filecontent()
{
    setGUI();
    setRegister();
    try {
        showfile();
    }
    catch (IOException e) {
        // Do something here
    }
    setTitle("FileData");
    setVisible(true);
    setSize(300, 300);

    /*
        addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent we)
            {
                System.exit(0);
            }
        });
    */
}

В случае второго:

public void actionPerformed(ActionEvent ae)
{
    if (ae.getSource() == submit)
    {
        showfile();
    }
}

Вы не можете выбросить IOException из этого метода, так как его сигнатура определяетсяинтерфейс, поэтому вы должны перехватить исключение внутри:

public void actionPerformed(ActionEvent ae)
{
    if(ae.getSource()==submit)
    {
        try {
            showfile();
        }
        catch (IOException e) {
            // Do something here
        }
    }
}

Помните, что метод showFile () вызывает исключение;это то, что ключевое слово throws указывает, что метод может вызвать это исключение.Если метод showFile () выбрасывает, то любой код, вызывающий этот метод, должен перехватить, или они сами генерируют исключение, включая то же добавление IOException throws к сигнатуре метода, если это разрешено.переопределяя сигнатуру метода, определенную в интерфейсе или суперклассе, который также не объявляет, что метод может вызвать это исключение, вы не можете объявить его как исключение.

1 голос
/ 03 января 2012

Ваш метод showFile () объявляет, что он может генерировать IOException.Поскольку это проверенное исключение, любой вызов метода showFile () должен каким-то образом обрабатывать исключение.Один из вариантов - заключить вызов showFile () в блок try-catch.

 try {
     showFile();
 }
 catch(IOException e) {
    // Code to handle an IOException here
 }
0 голосов
/ 03 января 2012

Когда вызываемый объект генерирует исключение, например void showfile () генерирует java.io.IOException , вызывающий должен обработать его или выбросить снова.

А также узнать правила именования.Имя класса должно начинаться с заглавной буквы.

...