我有一个连接远程服务器上的读取文件的应用程序。文件动态更新,这就是我使用 Timer 类定期重新读取此文件的原因。工作流程如下:
打开将显示文本的窗口。
开始读取文件(使用定时器每 15 秒重读一次)
在 15 秒内,窗口充满了数据,或者我在日志中收到异常。异常被抑制,我继续尝试读取数据。
例外是我的问题,因为用户不知道应用程序现在发生了什么。我运行了至少两个异常: - 如果文件不存在,我收到 FileNotFoundException。- 如果服务器处于维护状态,我会收到其他异常(我抓住了它,所以它的名字无关紧要)。
以下是上面代码中的样子:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final RemoteReader reader = new RemoteReader();
Timer timer = new Timer(15000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
reader.getMainPanel().readData();
} catch (IOException e) {
//Here is a counter that increases after each exception throw
if(counter >5) {
JOptionPane.showOptionDialog(chat,
e.getMessage(),
e.getClass().getName(),
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null,
new String[]{"Retry", "Cancel"}, //on Retry - make another 5 tries to read file, on cancel - close the window
null);
counter = 0;
}
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
});
timer.start();
}
});
}
public String readData() throws IOException {
// read and process data before returning it
// but for test purpose:
//BufferedReader br = new BufferedReader(new InputStreamReader(this.url.openStream()));
throw new IOException("cannot read file");
}
我想要做的是添加 JProgressBar。打开主窗口时会出现进度条,然后读取数据。如果 IOException 连续抛出 5 次,则显示选项对话框。否则隐藏进度条并显示数据。如果远程文件不可用,则显示选项对话框。然后按下重试按钮,显示进度条......然后工作流程从头开始。
一些代码示例会对我有所帮助,但我不希望整个问题的解决方案 - 建议,从设计的角度来看应该如何以正确的方式完成就足够了。Oracle 的样本对我来说有点模糊。