尝试使用线程进行简单的编程。但我无法理解一些事情。这是我的代码:
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MainClass {
public static void main(String[] args) {
new BIGBUTTON();
}}
class GUILCLASS extends Thread {
int i;
public GUILCLASS(){
start();
i=0;
}
@Override
public void run() {
super.run();
while (true){
System.out.println("I did this cycle " +i +" times");
i++;
try {
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class BIGBUTTON extends JFrame {
private JButton buttonForTestingButton;
private JPanel panel1;
GUILCLASS guilclass=new GUILCLASS();
boolean mark1;
public BIGBUTTON() {
panel1=new JPanel();
buttonForTestingButton=new JButton("Button for testing");
mark1=true;
setVisible(true);
setBounds(100,100,100,100);
add(panel1);
add(buttonForTestingButton);
buttonForTestingButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(mark1){
synchronized (guilclass){
try {
guilclass.wait();
mark1=false;
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
} else {
synchronized (guilclass){
guilclass.notify();
mark1=true;
}
}
}
});
}
}
我想要做的是点击按钮让一个线程等待()直到我再次点击这个按钮,但我的按钮只是冻结而没有其他事情发生。寻求帮助。
答案 0 :(得分:2)
您可能想了解wait()
的工作原理,因为它让您在执行它的地方睡眠。
基本上,如果你想让你的guilclass入睡,你必须在wait()
方法的某个地方调用run()
。最简单的方法是在线程static Object
内引入wait()
guilclass
,直到通知static boolean sleep
已设置为止。
按下按钮时必须设置static boolean sleep
。