java线程wait后还进行的问题

请问为什么我这个程序(一共两个线程)都已经处于等待状态了,而却没有用notify去唤醒,里面的语句还继续进行,请问这是为什么呀

你不要捕获之后什么都不做,你打印一下。
wait,notify,notifyAll都必须在对象的synchronized同步方法里面调用。如果wait没有在对象的synchronized同步块里面执行会抛出java.lang.IllegalMonitorStateException


package 线程;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.util.Scanner;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class GuessNumber extends JFrame implements ActionListener, Runnable {
    JLabel title;
    JButton start;
    JButton clear;
    JTextArea content;
    Thread gainNum;
    Thread guessNum;
    boolean die = false;
    boolean flag=true;
    GuessNumber() {
    }
    GuessNumber(String s) {
        super(s);
        this.setBounds(250, 100, 450, 350);
        this.setLayout(new BorderLayout());
        this.setDefaultCloseOperation(2);
        init();
        this.setVisible(true);
    }

    void init() {
        setLayout();
        addActionListenner();
        setThread();
    }

    private void setLayout() {
        Font font = new Font("微软雅黑", getFont().BOLD, 15);
        title = new JLabel("双线程猜数字游戏");
        title.setFont(font);
        title.setForeground(Color.red);
        start = new JButton("开始");
        clear = new JButton("清空");
        content = new JTextArea();
        Box box = Box.createHorizontalBox();
        Box box1 = Box.createVerticalBox();
        box1.add(new JLabel("  "));
        box.add(new JLabel("                            "));
        box.add(title);
        box.add(new JLabel("                          "));
        box.add(start);
        box.add(new JLabel("  "));
        box.add(clear);
        box1.add(box);
        this.add(box1, BorderLayout.NORTH);
        this.add(new JScrollPane(content), BorderLayout.CENTER);

    }

    private void addActionListenner() {
        start.addActionListener(this);
        clear.addActionListener(this);

    }

    private void setThread() {
        gainNum = new Thread(this);
        guessNum = new Thread(this);
        gainNum.setName("获得数字");
        guessNum.setName("猜数字");
    }

    

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == start) {    
            gainNum.start();
        } else {
            content.setText("");
            die=true;
        }
    }

    @Override
    public void run() {
        int i = 1;
        int anwser;
        int myAnwser = -1;
        Random random = new Random();
        if (Thread.currentThread().getName().equals("获得数字")) {
            anwser = random.nextInt(101);
            content.setText("随机给你一个1到100的数,猜猜是多少");
            while (true) {            
                content.append("\n我第" + i + "次猜的数是:");
                try {
                    if(flag) {
                        guessNum.start();
                        flag=false;
                    }
                    wait();
                } catch (Exception r) {
                    
                }
                if (myAnwser == anwser) {
                    content.append("\n恭喜你,猜对了!");
                    die = true;
                } else if (myAnwser < anwser) {
                    content.append("\n你猜小了");
                } else {
                    content.append("\n你猜大了");
                }
                if (die == true)
                    return;
                i++;
            }
            
        } else {
            try {
                
                while (true) {
                    if (die == true)
                        return;
                    String now=content.getText();
                    while(true) {
                        if(!content.getText().equals(now)) break;
                    }
                    String num[] = content.getText().split(":");
                    myAnwser = Integer.parseInt(num[num.length - 1]);
                    content.append(String.valueOf(myAnwser));
                    wait();
                }
            } catch (Exception e) {
            }
        }
        notifyAll();
    }
    public static void main(String[] args) {
        new GuessNumber("双线程猜数字");
    }
}