在AbstractAction中不能使用IOException

时间:2012-11-12 23:12:24

标签: java swing export ioexception

我遇到了一个奇怪的问题。由于在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);
  }
}

2 个答案:

答案 0 :(得分: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);
    }
 }

答案 1 :(得分: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);
        }
    }
}    

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

您可能希望查看Exception trail以获取更多信息