不能在抽象操作中使用 IOException



我遇到了一个奇怪的问题。由于按下 GUI 中的按钮,我需要将一些文本导出到文件中。但是,我不能将 IOException 应用于事件调用的 AbstractAction 的 actionPerforming 方法。我不知道如何解决这个问题。

下面是导出类:

import java.awt.event.*;
import java.lang.*;
import java.util.*;
import java.io.*;
public class ExportRunner
{
  public static void exportToFile(ArrayList<Locker> list) throws IOException
  {
  }
}

和抽象行动扩展:

class Export extends AbstractAction
{
  public Export()
  {
    super("Export");
  }
  public void actionPerformed(ActionEvent e)
  {
    ExportRunner.exportToFile(list);
  }
}

首先,您确定要重新抛出异常还是最好处理它和/或向用户显示消息?

选项 1:重新抛出异常(在我看来很丑陋):

public void actionPerformed(ActionEvent e) {
   try{
      ExportRunner.exportToFile(list);
   } catch(IOException ioex) {
      throw new RuntimeException(ioex);
    }
  }

选项 2:捕获并处理它:

public void actionPerformed(ActionEvent e) {
   try{
      ExportRunner.exportToFile(list);
   } catch(IOException ioex) {
      handleItOrShowMessageToUser(ioex);
    }
 }

我通常会将"错误处理程序"传递给操作类,这将允许将处理显示/报告错误的责任委派给应用程序的另一部分......

像...

public interface ErrorListener {
    public void errorOccurred(String msg, Exception exp);
}

然后你可以把它传递给你的操作...

public class Export extends AbstractAction
{
    private ErrorListener errorHandler;
    public Export(ErrorListener errorHandler)
    {
        super("Export");
        this.errorHandler = errorHandler;
    }
    public void actionPerformed(ActionEvent e)
    {
        try {
            ExportRunner.exportToFile(list);
        } catch (IOException exp) {
            errorHandler.errorOccurred("Failed to export file", exp);
        }
    }
}    

显然,在某个地方,您需要一个实现来处理回调;)

您可能想查看异常跟踪以获取更多信息

最新更新