java-菜鸟求问Java关于线程的问题!!

问题描述

菜鸟求问Java关于线程的问题!!

问题是这样的,尝试开发一个窗体,在窗体内有两个按钮,一个start,一个stop,当点击start按钮时在控制台持续打印一句话,当用户点击stop按钮时控制台打印结束。我的源代码是这样的,不知道哪里出错了,按下start以后就按不动stop了,求大神解答!

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Thread22 extends Frame {
Boolean flag = true;
Button b1;
Button b2;
public static void main(String[] args) {
new Thread22().F();
}

    public void F(){
        b1 = new Button("start");
        b2 = new Button("stop");

        add(b1, BorderLayout.NORTH);
        add(b2, BorderLayout.CENTER);
        new B1().start();
        new B2().start();
        pack();
        setVisible(true);
}

    class B1 extends Thread{

        public void run() {
            b1.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e) {
                    while(flag){
                        System.out.println("start");
                    }
                }

            });
        }

    }

    class B2 extends Thread{

        public void run() {
            b2.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e) {
                    flag = false;
                }

            });
        }

    }

}

解决方案

确实是线程阻塞,,你开始了一个线程绑定了b1点击事件 绑定完了线程结束了 ,当你点击执行的时候就不是线程在执行了是当前线程在执行.并且flag=true 所以当前线程永远都在打印start

解决方案二:

为何要写两个线程添加监听器?添加监听器的操作都放在主线程里,点击start后创建一个打印线程就行,不要一上来就直接启动线程

解决方案三:

java 线程阻塞的问题
兔子问题,java菜鸟编程
java菜鸟问题贴

解决方案四:

解决方案五:

在Stop按钮被按下事件发生之前,线程B2已经结束了,所以这个stop按钮根本没有效果。在B2中打印一句话就可以看出B2线程早就结束了。

  class B2 extends Thread{

        public void run() {
            System.out.println("stop is clicked...");
            b2.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e) {
                    System.out.println("stop is clicked...");
                    flag = false;
                }

            });
        }

    }

解决方案六:

谢谢大家 我明白了~

时间: 2024-12-01 17:58:06

java-菜鸟求问Java关于线程的问题!!的相关文章

求问java 异步编程实现的原理是什么?我一直不明白它与回调的区别,求解,谢谢

问题描述 求问java 异步编程实现的原理是什么?我一直不明白它与回调的区别.假如我在执行某个任务的时候我再开启另外一个线程进行监听,这个与异步的实现有什么区别? 解决方案 应该这样理解同步是和异步进行比较的回调只是一种编程方法,让代码更加的优雅,回调是函数式编程的一种说法,相对于面向对像编程时,"回调"就变成"事件监听"这种说法了我们常说的同步回调,指的就是一个代码执行过程中,需要等到回调函数完全执行完后,才能往 下走.异步回调指的是一个代码执行到回调函数时,他可

java 新手求问cannot be resolved to a type 的解决方法

问题描述 java 新手求问cannot be resolved to a type 的解决方法 这是我自学的一个项目,以前没发现这样的问题,jdk8.65,eclipse是最新版,看了网上的同类问题好像是jar包导入的问题,但是不知道具体怎样解决,请路过的大神指点迷津,万分感谢 import java.awt.*; import java.awt.event.*; public class ChatClient extends Frame{ TextArea ta = new TextArea

求问 java为什么空指针异常

问题描述 求问 java为什么空指针异常 type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: Exception in JSP: /select.jsp:36 33: 鐢佃瘽 34: 35: <

mysql-刚学JAVA,求个MySQL使用线程池插入表的例子

问题描述 刚学JAVA,求个MySQL使用线程池插入表的例子 就只对一个表进行插入,只要 insert into table(number) values(?) ,这个操作就行, 因为我想要插入十万条,百万条数据,次数大了用普通的效率太低了,上网查了都说是用线程池可以提高几倍,找了很久都没有具体例子,有的都是看不懂的.求好人给我个简单的例子,谢谢了!对了,祝大家 新年快乐! 解决方案 线程池提高效率是建立在连接上面的,怎么感觉跟你说的不太沾边呢,你的意思是要sql语句,还是创建线程池的代码 解决

网站设计 asp-网站产品搜索结果页翻页出错 asp 菜鸟求问

问题描述 网站产品搜索结果页翻页出错 asp 菜鸟求问 翻页后的结果如下图 搜索功能按钮部分html: search.asp文件内容: <!--#include file="inc/AspCms_SettingClass.asp" --> <% echoContent() Sub echoContent() dim page,keys page=filterPara(getForm("page","both")) keys=fi

html-divcss格式问题,菜鸟求问

问题描述 divcss格式问题,菜鸟求问 我在网上下载了一个树结构,打开的时候树结构也打开的,我想问一下怎么样可以让打开的时候是关闭的 解决方案 自己看api,一般有配置是否打开的关闭状态的 解决方案二: 菜鸟啊,关于动态数组的释放问题

数据存储-急!菜鸟求问,怎么捕获来电信息?

问题描述 急!菜鸟求问,怎么捕获来电信息? 就是普通电话通过什么硬件的交互能捕获来电信息吗? 获取号码是否需要什么硬件呢? 我需要获取电话呼入的号码来定位他的客户. 解决方案 只需要一个com口调制解调器就可以了.你计算机这里串口通讯就可以得到来电 解决方案二: 这有一个前题,就是你的电话有来电显示功能.这需要与电信约定,需月租费. 1.目前,有一种外置来电显示器,通过它可以显示电话来电信息. 2.通过计算机获取来电信息,一般需要通过一只调解调制器,即猫.串接在电话接线接口之前,需要通过编程非常

c语言-菜鸟求问C语言,if,else

问题描述 菜鸟求问C语言,if,else #include #include char *compare(char *,char *); int main() { char *a1="assss"; char *a2="q"; char *big; big=compare(a1,a2); printf("%s",big); return 0; } char *compare(char *a,char *b) { char *c; int ptr;

网站设计-菜鸟求问: 对象不支持“jqueryzoom”属性或方法

问题描述 菜鸟求问: 对象不支持"jqueryzoom"属性或方法 功能: 网站产品页面的图片放大镜功能 效果:鼠标移动上去后没反应 报错:IE调试时候, 报错-->对象不支持"jqueryzoom"属性或方法 谢谢各位大神不吝赐教,本人真心菜鸟一个 解决方案 求各路大神现身 说法....... 解决方案二: jqueryzoom是一个插件,对应的js导入了么 解决方案三: http://ask.csdn.net/questions/184881 解决方案四: