リモートサーバー上の読み取りファイルに接続するアプリがあります。ファイルは動的に更新されるため、Timer クラスを使用してこのファイルを定期的に再読み込みします。ワークフローは次のとおりです。
テキストを表示するウィンドウを開きます。
ファイルの読み取りを開始 (タイマーを使用して 15 秒に 1 回再読み取り)
15 秒でウィンドウがデータでいっぱいになるか、ログに例外が表示されます。例外は抑制され、データの読み取りを続行します。
ユーザーはアプリで現在何が起こっているのかわからないため、例外は私の問題です。私が実行した例外は少なくとも 2 つあります。 - ファイルが存在しない場合、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 回連続でスローされた場合、オプション ダイアログを表示します。それ以外の場合は、進行状況バーを非表示にしてデータを表示します。リモート ファイルが利用できなくなった場合、オプション ダイアログを表示します。再試行ボタンを押すと、プログレス バーが表示され、ワークフローが最初から開始されます。
いくつかのコード例が役立ちますが、問題全体の解決策は期待していません-アドバイス、設計の観点から正しい方法で行う方法で十分です。オラクルのサンプルは、私には少しあいまいです。