1

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

这是导出类:

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
  {

  }
}

和 AbstractAction 扩展:

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

2 回答 2

3

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

选项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);
    }
 }
于 2012-11-12T23:22:07.363 回答
1

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

就像是...

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

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

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

于 2012-11-12T23:30:32.477 回答