我在Java中的线程

时间:2013-10-16 09:00:22

标签: java multithreading wait

尝试使用线程进行简单的编程。但我无法理解一些事情。这是我的代码:

 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;
                }
            }
        }
    });
     }
  }

我想要做的是点击按钮让一个线程等待()直到我再次点击这个按钮,但我的按钮只是冻结而没有其他事情发生。寻求帮助。

1 个答案:

答案 0 :(得分:2)

您可能想了解wait()的工作原理,因为它让您在执行它的地方睡眠。

基本上,如果你想让你的guilclass入睡,你必须在wait()方法的某个地方调用run()。最简单的方法是在线程static Object内引入wait() guilclass,直到通知static boolean sleep已设置为止。 按下按钮时必须设置static boolean sleep