java求解答;成员变量thread直接创建对象无法正常运行,而换成jb的匿名内部类中thread创建对象就运行正常

mahai 发布于 2016/08/16 19:29
阅读 237
收藏 0

/*
 *开发一个窗体,有一个开始按钮和一个结束按钮
 *点击开始按钮,控制台持续打印一句话;点击结束按钮,控制台结束打印
 */
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Exercise18_2 extends JFrame {
    private static final long serialVersionUID = 1L;
    MyThread thread;
    private boolean isContinue;
    public Exercise18_2() {
        try {
            createJFrame();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /****创建一个窗体****/

    public void createJFrame() throws Exception {
        JFrame jf = new JFrame();    //创建一个JFrame对象
        jf.setTitle("控制窗口");
        Container co = jf.getContentPane();   //获得一个容器
        jf.setVisible(true);
        jf.setSize(300,300);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        /****JPanel面板****/

        JPanel jp = new JPanel();
        co.add(jp,BorderLayout.CENTER);
        /****JButton按钮****/

        JButton jb = new JButton();
        jb.setText("开始");
        JButton jb1 = new JButton();
        jb1.setText("结束");
        jp.add(jb);
        jp.add(jb1);
        /****开始按钮动作事件监听器****/

        jb.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if (thread != null)
                    isContinue=false;
                thread = new MyThread();
                thread.start();
            }
        });
       
        /****结束按钮动作事件监听器****/

        jb1.addActionListener(new java.awt.event.ActionListener(){
            public void actionPerformed(ActionEvent e){
                if (thread != null)
                    isContinue=false;
                thread = null;
            }
        });
       
    }
    
    /****创建MyThread类,继承Thread类****/

    private class MyThread extends Thread{
        public MyThread(){
            isContinue = true;
        }
        /****run方法****/

        public void run(){
            System.out.println("\n\n");
            while(true && isContinue) {
                try{
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("您已按下开始按钮,开始在控制台持续打印这句话。\n");
            }
        }
    }

    /****主方法****/

    public static void main(String[] args) {
        Exercise18_2 ex = new Exercise18_2();
    }
}

加载中
0
mahai
mahai
问题的后面是:jb的匿名内部类中thread创建对象就运行正常。
0
mahai
mahai
不好意思,我写错了,不是创建,是实例化对象。
返回顶部
顶部