我正在完成一项家庭作业,将Knock Knock应用程序的this Java Tutorial转换为Swing GUI应用程序并使用多线程。
我有帮助类抛出异常。这些类不扩展JFrame,我无法创建新的JOptionPane来显示异常。你会如何向用户展示该例外?
例如:我有一个类从两个文本文件加载笑话(一个用于线索,一个用于答案)。如果在我期望的位置找不到文本文件,我将抛出NullPointerException。因为这是一个帮助类,所以它不会扩展JFrame。我该如何将该消息与用户联系起来?我只是在我的代码中引用javax.swing.JOptionPane showMessageDialog方法,或者我可以使用另一个代理类来捕获异常并显示它们吗?
private final void getFilePath(ResponseFiles fileToGet) {
String packagePath = "/com/knockknock/message";
try {
if (fileToGet == ResponseFiles.CLUES)
file = new File(getClass().getResource(String.format("%s/clues.txt", packagePath)).getPath());
else if (fileToGet == ResponseFiles.ANSWERS)
file = new File(getClass().getResource(String.format("%s/answers.txt", packagePath)).getPath());
} catch (NullPointerException e) {
javax.swing.JOptionPane.showMessageDialog(null, "Jokes Files Missing", "File Missing", JOptionPane.ERROR_MESSAGE);
}
你怎么看?
答案 0 :(得分:0)
您可以传递异常并单独处理它,而不是在业务层中使用Swing组件。
有一些自定义的异常处理程序类,您可以在其中处理运行时/已检查/自定义异常。
public class ExceptionHandler {
public void handleException(Exception exp) {
if (exp instanceof NullPointerException) {
javax.swing.JOptionPane.showMessageDialog(null,
"Jokes Files Missing", "File Missing",
JOptionPane.ERROR_MESSAGE);
} else if (exp instanceof IOException) {
javax.swing.JOptionPane.showMessageDialog(null, "Test", "Test",
JOptionPane.ERROR_MESSAGE);
}
//Handle other exceptions
}
}
更改您的方法,如
private final void getFilePath(ResponseFiles fileToGet) {
String packagePath = "/com/knockknock/message";
if (fileToGet == ResponseFiles.CLUES)
file = new File(getClass().getResource(
String.format("%s/clues.txt", packagePath)).getPath());
else if (fileToGet == ResponseFiles.ANSWERS)
file = new File(getClass().getResource(
String.format("%s/answers.txt", packagePath)).getPath());
}
在完成GUI交互的业务层中,您可以处理这样的异常。在你的情况下,因为它是运行时异常,所以不需要显式抛出。
try {
getFilePath(ResponseFiles.CLUES);
} catch (Exception e) {
new ExceptionHandler().handleException(e);
}