2
回答
有 wait就必须要有synchronized,不然会报错吗??
注册华为云得mate10,2.9折抢先购!>>>   

<无详细内容>

举报
kkn1x
发帖于3年前 2回/460阅
共有2个答案 最后回答: 3年前

这个代码没有synchronized也没报错啊,怎吗做到滴???


package tank;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class TestApp extends JFrame implements ActionListener, Runnable {
    private TestThread thread = null;
 
    public TestApp() {
 
        JPanel buttons = new JPanel();
        FlowLayout layout = new FlowLayout(FlowLayout.CENTER);
        buttons.setLayout(layout);
        add(buttons, BorderLayout.NORTH);
 
        JButton btn = new JButton("pause");
        btn.addActionListener(this);
        buttons.add(btn);
 
        JLabel label = new JLabel();
        add(label, BorderLayout.CENTER);
 
        setSize(800, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        thread = new TestThread(label);
        thread.start();
    }
 
    public static void main(String[] args) {
        new TestApp();
    }
 
    public void actionPerformed(ActionEvent e) {
        JButton btn = (JButton) e.getSource();
        if ("pause".equals(btn.getText())) {
            btn.setText("start");
            thread.callWait();
        } else {
            btn.setText("pause");
            thread.call();
        }
    }
 
    public void run() {}
}
 
class TestThread extends Thread {
    private boolean isWait = false;
    private JLabel labe = null;
 
    public TestThread(JLabel labe) {
        this.labe = labe;
    }
 
    public void run() {
        int index = 0;
        while (true) {
            try {
                if (isWait) {
                    wait();
                }
                labe.setText("" + (++index));
                sleep(500);
            } catch (Exception e) {
 
            }
        }
    }
 
    public synchronized void callWait() {
        isWait = true;
    }
 
    public synchronized void call() {
        isWait = false;
        notify();
    }
}

  while (true) {
try {
                if (isWait) {
                    wait();
                }
                labe.setText("" + (++index));
                sleep(500);
            } catch (Exception e) {

            }

你把异常吃掉了

顶部