java线程问题-java,线程终止问题,线程设置静态后,每次点击后原来的线程不能消失

问题描述

java,线程终止问题,线程设置静态后,每次点击后原来的线程不能消失

package com.radio.weather.view;
import javax.swing.*;

import com.radio.weather.model.*;

import java.util.*;
import java.awt.event.*;
import java.awt.*;
public class WeatherFrame extends JFrame implements ActionListener{

//定义所需要的组件
JPanel jp1,jp2;
JButton jb1,jb2;
JTextArea jta;
JTextField jtf;
JScrollPane jsp;
String sendInfo;
Date date;
static Thread t=null;
public static void main(String[] args) {
    // TODO 自动生成的方法存根

    new WeatherFrame();
}

public WeatherFrame()
{
    //初始化组件
    jp1=new JPanel();
    jp1.setLayout(new BorderLayout());
    jp2=new JPanel();
    jp2.setLayout(new FlowLayout());

    jb1=new JButton("停止");
    jb2=new JButton("发送");
    jb2.addActionListener(this);

    jta=new JTextArea();
    jtf=new JTextField(20);
    jsp=new JScrollPane(jta);

    //初始化jp2
    jp2.add(jb1);
    jp2.add(jtf);
    jp2.add(jb2);

    //初始化jp1
    jp1.add(jsp);
    jp1.add(jp2,"South");

    this.add(jp1);
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(400,300);

}

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成的方法存根
    if(arg0.getSource()==jb2&&(!(jtf.getText().length()==0)))
    {

        Date date=new Date();
        String time=String.format("%tT", date);
        String month=String.format("%tF", date);
        this.sendInfo=month+" "+time+": "+jtf.getText()+"rn";
        jta.append(sendInfo);
        jtf.setText("");
        //定义发送信息的线程
        this.t=new SendMessage(sendInfo);
        this.t.start();

    }
}

}

为什么我的线程t设为static后,每次点击jb2即发送按钮后原线程覆盖不了,还会继续继续运行,同时会新建一个线程。如何把原来的线程给停止掉。

这是控制台的信息:
2013-12-20 20:53:13: 第一次点击发送按钮

2013-12-20 20:53:13: 第一次点击发送按钮

2013-12-20 20:53:13: 第一次点击发送按钮

2013-12-20 20:53:20: 第二次点击发送按钮

2013-12-20 20:53:13: 第一次点击发送按钮

2013-12-20 20:53:20: 第二次点击发送按钮

时间: 2024-11-27 04:36:49

java线程问题-java,线程终止问题,线程设置静态后,每次点击后原来的线程不能消失的相关文章

java线程技术——线程的创建运行终止

http://blog.chinaunix.net/uid-122937-id-192835.html 1.创建和运行线程在Java中,多线程的实现有两种方式:      扩展java.lang.Thread类      实现java.lang.Runnable接口 (1)扩展Thread类      Thread Test = new Thread();      Test.start(); (2)实现Runnable接口将实现Runnable接口的类实例化            Test i

从线程继承(java)

为创建一个线程,最简单的方法就是从Thread类继承.这个类包含了创建和运行线程所需的一切东西.Thread最重要的方法是run().但为了使用run(),必须对其进行过载或者覆盖,使其能充分按自己的吩咐行事.因此,run()属于那些会与程序中的其他线程"并发"或"同时"执行的代码. 下面这个例子可创建任意数量的线程,并通过为每个线程分配一个独一无二的编号(由一个静态变量产生),从而对不同的线程进行跟踪.Thread的run()方法在这里得到了覆盖,每通过一次循环,

spring线程池-java线程,spring 线程池

问题描述 java线程,spring 线程池 大家好: 我现在有几个疑惑的地方 1.如果使用spring 线程池,或者java自带的线程池,那应用程序中的所有线程都 受到创建的这个线程池管理,还是只通过线程池.execute加进去的才被管理. 2.spring MVC 线程池threadPoolTaskExecutor 配置了最少活跃线程10个,最大10个, 那如果线程池中已经有10个活跃的线程在执行,如果继续往线程池中execute,此时的线程 是出于等待,还是直接挂掉,这个spring的线程

线程-关于java sychronized锁代码块对该对象的其它sychonized方法是否有影响的问题。

问题描述 关于java sychronized锁代码块对该对象的其它sychonized方法是否有影响的问题. 代码是书上例子,我简化了,启用线程ob1后,通过主线程调用sychonized方法mysuspend()和myresume()来控制ob1线程的等待与重启.线程从15开始倒数,0.5秒个,主线程在1秒时候暂停文字提示,再过1秒重启线程.例子中的sychonized代码块仅包含wait()判定部分,输出与预期一样,倒数到14的时候中断,之后又恢复.但是当我将sychonized代码块前移

java编程思想-java编程四线第二十一章 线程SynchronizationComparisons.java有错误

问题描述 java编程四线第二十一章 线程SynchronizationComparisons.java有错误 //BaseLine 和AtomicTest 是线程不安全的 ,求解答 //: concurrency/SynchronizationComparisons.java// Comparing the performance of explicit Locks// and Atomics versus the synchronized keyword.import java.util.c

java线程问题-java当中的run方法是线程及其子类独有的吗

问题描述 java当中的run方法是线程及其子类独有的吗 java当中的run方法是线程及其子类独有的吗 如果不是,其他类调用run方法需要注意些什么问题 解决方案 是线程具体代码运行的入口,你不要在外部直接调用,否则就是同步的,达不到异步效果,你只需要start线程,它自己会执行run 解决方案二: JAVA run方法中得到线程名称java 线程 start 方法 跟 run 方法的区别Java线程中run和start方法的区别

java基本教程之线程让步 java多线程教程_java

本章涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 1. yield()介绍yield()的作用是让步.它能让当前线程由"运行状态"进入到"就绪状态",从而让其它具有相同优先级的等待线程获取执行权:但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权:也有可能是当前线程又进入到"运行状态"继续运行! 2. yield()示例下面,通过示例查看它

JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口

JAVA之旅(十二)--Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一.Thread 如何在自定义的代码中,自定义一个线程呢? 我们查看API文档,我们要启动一个线程,先实现一个子类, package com.lgl.hellojava; public class MyThread extends Thread { @Override public void run()

线程管理(二)获取和设置线程信息

获取和设置线程信息 Thread类的对象中保存了一些属性信息能够帮助我们来辨别每一个线程,知道它的状态,调整控制其优先级. 这些属性是: ID: 每个线程的独特标识. Name: 线程的名称. Priority: 线程对象的优先级.优先级别在1-10之间,1是最低级,10是最高级.不建议改变它们的优先级,但是你想的话也是可以的. Status: 线程的状态.在Java中,线程只能有这6种中的一种状态: new, runnable, blocked, waiting, time waiting,