Я пытаюсь заставить мою программу постоянно обновлять значения индикатора выполнения внутри метода при выполнении некоторых операций. Однако этого не происходит до конца, и пользовательский интерфейс зависает.
Посмотрев на похожие вопросы с моими проблемами, я попытался реализовать принятые решения (используя потоки), но не могу заставить его работать правильно. Это как если бы их там не было.
Моя программа содержит несколько классов, из которых Main
- это тот, который автоматически создается netbeans в режиме JFrame Design , так что есть определенные вещи такие как static void main
и public Main
, которые не совсем уверены в некотором его содержимом. Ниже я помещу фрагменты этих методов, вместе с моей реализацией потока.
public class Main extends javax.swing.JFrame implements ActionListener, Runnable{
// I added implements ActLis, Runn.....
...
static Main _this; // I included this variable
...
public static void main(String args[]) {
Main m = new Main(); // Added by me
new Thread(m).start(); // Added by me
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
...
public Main() {
initComponents();
_this = this; // Added by me
}
...
// I also included these 2 methods in the class
public void actionPerformed(ActionEvent e) {
synchronized(this){
notifyAll();
}
}
public void run() {
try{synchronized(this){wait();}}
catch (InterruptedException e){}
progressBar.setValue(50);
}
...
private void buttonPressed(java.awt.event.MouseEvent evt) {
for(int i=0; i<=100; i++) {
for(int j=0; j<=5; j++) {
// does some work
}
run();
}
}
Все, что я прокомментировал как , я добавил ...
это вещи, которые я использовал в соответствии с учебными пособиями и ответами, которые я видел в Интернете, но похоже, что ничего не работает, и похоже, что я пробовал около миллиона различных комбинаций ...
Заранее спасибо за помощь.