Java Swing的错误消息

3
我有一个关于Java Swing处理错误条件的查询。
我正在使用Netbeans开发一个简单的Java Swing应用程序。 它将加载文本文件,然后根据文本文件中找到的数字运行计算。主要的Swing类持有JFrames和JPanels。
我将文件加载代码作为单独的类文件。它将返回读取的行数和数字列表回到主Swing应用程序。
我意识到如果文件读取失败(即try -> catch(Exception ex)),整个应用程序都会崩溃。 处理上述情况导致的错误的最佳方法是什么?也就是说,文件加载代码崩溃,我不想让整个程序崩溃。 我希望程序能够显示文件已损坏并等待用户加载新文件。
任何想法?
Yakult

2
也许你应该展示一些代码,以便我们了解你的操作是具体什么样子的? - Wim Deblauwe
3个回答

6
当您捕获异常时,请执行以下操作:
JOptionPane.showMessageDialog("File is corrupted. Please select a new file.");

然后再次显示文件对话框。

最好将此操作作为循环执行,只要文件无效就继续执行。如果存在损坏,则不要抛出异常,而是设置一个布尔标志并循环执行直到标志被取消。这样,当找到有效文件时,while循环将终止。

示例:

public static void main(String[] args){
    boolean goodFile = false;

    while (!goodFile){
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog();

        goodFile = processFile(chooser.getSelectedFile());
    }
}

private boolean processFile(File file){
    //do you stuff with the file

    //return true if the processing works properly, and false otherwise    
}

2
这种方式通常是最好的选择。+1 - Radu Murzea
2
不需要循环,这会使事情变得更加复杂。只需按照我的建议,当文件损坏时,线程将仅再次调用读取模块。 - GingerHead
2
只有当您访问文件后,您才能知道它是否是一个好文件。 - GingerHead

1

是的,问题出在您的IO读取概念上。 while循环一直读到文件末尾等等... 为了防止这种情况,您可以使用缓冲读取器 并使用以下代码

String line = null
while((line = reader.readLine())!= null) {
// do stuf
}

如果您在处理读取行时遇到问题,您只需要创建一个自己的异常类,通过扩展Exception类并在catch块中抛出该异常即可。在将消息设置为自定义异常类后,您可以将该消息设置为...
 JOptionPane.showMessageDialog(null,"message here"); //showMessageDialog is a static method

好的


2
我认为原帖作者没有遇到这个问题。 - GingerHead

0
你只需捕获异常并在catch块中设置条件。如果文件包含其他应用程序应处理的内容,则可以调用处理另一个文件的方法。

对于新的文件操作,主要处理将从catch块开始。因此,通过这种方式,您可以使用Java抛出的异常以全新的方式重新启动应用程序,而不是从零级别重新启动应用程序。


1
@ewok,你深思熟虑的评论大大扩大了我无知的范围。 - GingerHead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接