Я пытаюсь заставить мою программу постоянно обновлять значения индикатора выполнения в методе при выполнении некоторых операций. Однако это не происходит до конца, и пользовательский интерфейс зависает.
Посмотрев вокруг похожих вопросов с моими проблемами, я попытался реализовать принятые решения (используя потоки), однако не могу заставить его работать правильно. Это как если бы их там не было.
Моя программа содержит несколько классов, 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();
}
}
Все вещи, которые я прокомментировал как I added...
, - это вещи, которые я поместил в соответствии с учебными пособиями и ответами, которые я видел в Интернете, но, похоже, ничего не работает, и мне кажется, что я пробовал около миллиона различных комбинаций ...
Заранее спасибо за помощь.