В моем приложении Java GUI у меня есть JButton
, и при нажатии он вызывает function
для подключения к database
, а затем вызывает function
до clear
a table
в DB
затем вызывает function
, который читает текст из одного файла и загружает variables
, который вызывает function
, который читает текст из другого файла, сравнивает data
из обоих файлов и затем вызывает function
с любым из них update
или insert
данные в БД, все это прекрасно работает.
Однако мой вопрос связан с JButton
, когда его щелкнули, я хочу запустить Indeterminate progress bar
только для того, чтобы пользователь знал, что работа выполняется, а затем прямо перед тем, как он покинул action listener setIndeterminate to false
и установил значение от progress bar
до 100(complete)
, но в моем случае, когда вы нажимаете button
, он остается в нажатом состоянии, а progress bar
останавливается.
Что я должен реализовать, чтобы предотвратить это? возможно нарезка резьбы? но я новичок в потоках в Java. вот мой слушатель действий:
private class buttonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if( e.getSource() == genButton )
{
progressBar.setIndeterminate(true);
progressBar.setString(null);
try
{
dbConnect(); //connects to DB
clearSchedules(); // deletes data in tables
readFile(); // reads first file and calls the other functions
dbClose();// closes the DB
progressBar.setIndeterminate(false);
progressBar.setValue(100);
}
catch (Exception e1){
System.err.println("Error: " + e1.getMessage());
}
}
}
}
Кстати, я бы хотел, чтобы панель действий фактически двигалась по мере продвижения программы, но я не был уверен, как следить за ее ходом.
Спасибо, Говядина.
ОБНОВЛЕНИЕ Вот мой пример SwingWorker и как я его использовал:
Объявлено глобально
private functionWorker task;
private abstract class functionWorker extends SwingWorker {
public void execute() {
try {
dbConnect();
} catch (SQLException e) {
e.printStackTrace();
}
clearSchedules();
try {
readFile();
} catch (IOException e) {
e.printStackTrace();
}
dbClose();
}
}
Внутри моего действия Выполненный метод
if( e.getSource() == genButton )
{
progressBar.setIndeterminate(true);
progressBar.setString(null);
try
{
task.execute();
progressBar.setIndeterminate(false);
progressBar.setValue(100);
}
catch (Exception e1){
System.err.println("Error: " + e1.getMessage());
}
}