我遇到了一个奇怪的问题。由于按下 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);
}
}
}
显然,在某个地方,您需要一个实现来处理回调;)
您可能想查看异常跟踪以获取更多信息