У меня есть большая программа, которую нужно вызывать с помощью графического интерфейса. В графическом интерфейсе есть индикатор выполнения, который необходимо обновить (например, 5% .... 10%) после того, как пользователь нажмет кнопку запуска. Проблема в том, что выполняемая фоновая задача не имеет фиксированного времени выполнения. Таким образом, каким-то образом можно измерить ход выполнения задачи в методе doInBackground() (я пытаюсь использовать SwingWorker). Или я должен идти с неопределенным индикатором выполнения. Я не смог четко понять пример, представленный на странице учебника Oracle, и не смог найти достойную страницу, объясняющую, как использовать индикатор выполнения. Любая помощь будет высоко оценена.
Обновление индикатора выполнения
comment
stackoverflow.com/questions/277007/how-to-use-jprogressbar действительно похоже на ваш вопрос.
- person MemLeak   schedule 06.03.2014
comment
@MemLeak ввод в мою программу не имеет фиксированного размера, и, соответственно, время выполнения варьируется. Программа использует генетический алгоритм и реализуется с помощью потока.
- person Sashank   schedule 06.03.2014
comment
извини @ user3313050 я не могу этого сделать. Но можете ли вы объяснить, как метод public void propertyChange(PropertyChangeEvent evt) работает в данном ссылка
- person Sashank   schedule 06.03.2014
Ответы (1)
Согласно задаче, я бы использовал бесконечный индикатор выполнения
public class Indeterminate extends JProgressBar {
private static final long serialVersionUID = -281761375041347893L;
/***
* initial the ProgressBar
*/
public IndeterminateProgressBar() {
super();
setIndeterminate(true);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
setVisible(false);
}
});
}
/**
* call this, if you start a long action
*/
public void start() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
setVisible(true);
}
});
}
/**
* if you have finished, call this
*/
public void end() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
setVisible(false);
}
});
}
}
Используется следующим образом:
ActionListener startButtonListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Thread(new Runnable() {
@Override
public void run() {
try {
progressBar.start();
// long operation
} catch (Exception e) {
// handle excpetion
} finally {
progressBar.end();
}
}
}).start();
}
};
person
MemLeak
schedule
06.03.2014
Спасибо за ответ, я попробую это.
- person Sashank; 06.03.2014