2

尝试做使用线程的简单程序。但是有些东西我看不懂。这是我的代码:

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

我想要做的是通过单击按钮使一个线程等待(),直到我再次单击此按钮,但我的按钮只是冻结并且没有其他任何事情发生。寻求帮助。

4

1 回答 1

2

你可能想了解它是如何wait()工作的,因为它让你执行它的线程休眠。

基本上,如果你想让你的 guilclass 睡觉,你必须在方法wait()内部的某个地方调用run()。对您来说最简单的方法是在 Thread中引入 a static Object,直到如果设置了 a 则通知您。必须在按下按钮时设置。wait()guilclassstatic boolean sleepstatic boolean sleep

于 2013-10-16T09:07:57.127 回答