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