У меня есть приложение, которое соединяет файл reads на удаленном сервере. Файл динамически обновляется, поэтому я использую Timer class, чтобы периодически перечитывать этот файл. Workflow является следующее:Manipulation with JProgressBar in Swing
Открыть окно, в котором будет отображаться текст.
Начать чтение файла (перечитать один раз в 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 немного расплывчаты для меня.
* «Я не прошу дать мне реализацию». * Вы задаете вопрос? Если так, то, что это? –
Я неправильно выразился. Я имел в виду, что некоторые примеры кода помогли бы мне, но я не ожидал решения для моей проблемы - советы, как это должно быть сделано правильно с точки зрения дизайна и т. Д. Я редактирую его. – Dragon
Если доступна Java 7, см. Это [Q & A] (http://stackoverflow.com/q/7784909/230513). – trashgod