как решить java.awt.event.ActionListener не выдает ошибку IOException? - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь сделать так, чтобы при нажатии моей кнопки «Сохранить изображение» она сохраняла мои данные под заданным именем файла. когда я пытаюсь запустить мой save(PrintWriter write) в ActionListener, он показывает ошибку.

Моя трассировка стека

actionPerformed (java.awt.event. ActionEvent) in
Oval.SaveButtonAction Cannot implement
actionPerformed(java.awt.event.ActionEvent) in
java.awt.event.ActionListener
overridden method does not throw java.io.IOException

это мой код.

public class Oval extends JPanel 
{


 private String filename = "";
    private PrintWriter writer;

public Oval() throws IOException
    {
        Buttons();      

    }

public void save(PrintWriter writer) throws IOException // this is my save method....
    {

        for(int i=0;i<ovalColor.size();i++)
        {
            writer.println(ovalX.get(i)+","+ovalY.get(i)+","+ovalColor.get(i).getRGB());
        }
    }

String filename  = "123.txt"
writer = new PrintWriter(filename);

/**
     * Action Listener for saveImage button
     */
class SaveButtonAction implements ActionListener  
    {
        public void actionPerformed(ActionEvent e) throws IOException // here i am getting Exception error
        {
            save(writer);
        }
    }
}

1 Ответ

0 голосов
/ 13 марта 2019

В вашем классе SaveButtonAction вы реализуете метод actionPerformed, как это определено в интерфейсе ActionListener.

Если вы проверите исходный код, вы увидите, что ActionListener#actionPerformed не генерирует никаких исключений в своей подписи. Тем не менее, когда вы реализуете его, вы выполняете вызов Oval#save, который выбрасывает IOException. Пытаясь это сделать, вы добавляете предложение throws в сигнатуру метода, тем самым изменяя его.

Это фактически нарушает контракт, определенный интерфейсом, и приводит к ошибке, упомянутой в вашем вопросе.

Либо потеряйте предложение throws и обработайте исключение внутренне, либо, если вы так заинтересованы в нем, оберните его в непроверенное исключение и повторно сгенерируйте его.

Я бы также настоятельно рекомендовал ознакомиться с правильным способом реализации интерфейсов. Кажется, вам не хватает этой области.

...