| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2410 人关注过本帖
标题:如何停止线程
取消只看楼主 加入收藏
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
结帖率:0
收藏
 问题点数:0 回复次数:4 
如何停止线程

我写了个记事本
在里面用一个线程来在文本域中显示时间
此时我要读入文本 该怎么停止这个线程?

package textedit;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

public class TXTFrame extends JFrame{

public TXTFrame(){

panel=new TXTPanel();
add(panel);

setTitle("记事本");
Toolkit kit=getToolkit();
Dimension screen=kit.getScreenSize();
int width=screen.width;
int height=screen.height;
setBounds(width/4,height/4,width/2,height/2);

file=new JMenu("文件");
edit=new JMenu("编辑");

m1=new JMenuItem("新建");
m2=new JMenuItem("打开");
m3=new JMenuItem("保存");
m4=new JMenuItem("另存为") ;
m5=new JMenuItem("退出");

m6=new JMenuItem("撤销");
m7=new JMenuItem("剪切");
m8=new JMenuItem("复制");
m9=new JMenuItem("粘贴");
m10=new JMenuItem("删除");
m11=new JMenuItem("查找");
m12=new JMenuItem("查找下一个");
m13=new JMenuItem("替换");
m14=new JMenuItem("转到");
m15=new JMenuItem("全选");
m16=new JMenuItem("时间/日期");

m1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
panel=new TXTPanel();
add(panel);
}
});

m2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
/*setBoolean(false);
setThread();*/
i=false;

chooser.setCurrentDirectory(new File("E:\\me"));
chooser.setFileFilter(filter);
//chooser.setAcceptAllFileFilterUsed(false);
//chooser.setSelectedFile(new File("1.txt"));
//System.out.print(JFileChooser.CANCEL_OPTION);
int ss=chooser.showOpenDialog(TXTFrame.this);
//System.out.print(ss);
if(ss==JFileChooser.APPROVE_OPTION){


String s,s2=new String(),str;
try{
//str=chooser.getCurrentDirectory().toString()+"\\"+chooser.getSelectedFile().getName();
in=new BufferedReader(new FileReader(chooser.getSelectedFile().getPath()));
while((s=in.readLine())!=null)
s2+=s+"\n";
in.close();
panel.getJText().setText(s2);
}catch(IOException e){
e.printStackTrace();
}
}
/*if(ss==JFileChooser.CANCEL_OPTION){
panel.text.setText(chooser.getCurrentDirectory().toString());
}*/
}
});

m3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
/*setBoolean(false);
setThread();*/

chooser.setCurrentDirectory(new File("E:\\me"));
chooser.setFileFilter(filter);
chooser.setAcceptAllFileFilterUsed(false);
int ss=chooser.showSaveDialog(TXTFrame.this);
if(ss==JFileChooser.APPROVE_OPTION){
String s;
s=panel.getJText().getText();
//System.out.print(s);
try{
String str=chooser.getSelectedFile().getPath()+filter.getDescription();
out=new BufferedWriter(new FileWriter(str));
out.write(s);
out.close();
}catch(IOException e){

}
}
}
});

m4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
/*setBoolean(false);
setThread();*/

chooser.setCurrentDirectory(new File("E:\\me"));
chooser.setFileFilter(filter);
int ss=chooser.showSaveDialog(TXTFrame.this);
if(ss==JFileChooser.APPROVE_OPTION){
String s=panel.getJText().getText();
try{
String str=chooser.getSelectedFile().getPath()+filter.getDescription();
out=new BufferedWriter(new FileWriter(str));
out.write(s);
out.close();
}catch(IOException e){

}
}
}
});

m5.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});

m16.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
if(!d.isAlive()){
i=true;
d.start();
}/*else if(d.isAlive()){
i=true;
}*/

}
});


file.add(m1);
file.add(m2);
file.add(m3);
file.add(m4);
file.add(new JSeparator());
file.add(m5);

edit.add(m6);
edit.add(new JSeparator());
edit.add(m7);
edit.add(m8);
edit.add(m9);
edit.add(m10);
edit.add(new JSeparator());
edit.add(m11);
edit.add(m12);
edit.add(m13);
edit.add(m14);
edit.add(new JSeparator());
edit.add(m15);
edit.add(m16);

menubar=new JMenuBar();
menubar.add(file);
menubar.add(edit);
setJMenuBar(menubar);
}

private class DateThread extends Thread{
public void run(){
if(i){
while(i){
panel.getJText().setText(new Date().toString());
try{
Thread.sleep(100);
}catch(InterruptedException e){

}
}
}else{
return;
}
}
}

/*public void setBoolean(boolean i){
this.i=i;
}

public void setThread(){
if ( i ) {
if(d.isAlive()&&d.){
d.notify();
}else{
d.start();
}
}
else {
try{
if(d.isAlive())
d.wait();
}catch(InterruptedException e){
e.printStackTrace();
}

}
}
*/


private JMenuItem m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16;
private TXTPanel panel;
private JMenuBar menubar;
private JMenu file,edit;
private JFileChooser chooser=new JFileChooser();
private File f;
private BufferedReader in;
private BufferedWriter out;
private TXTFilter filter=new TXTFilter();
private boolean i=false;
private DateThread d=new DateThread();
}


搜索更多相关主题的帖子: 线程 import java awt panel 
2007-07-11 14:33
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
wait()说是等待另一个线程来唤醒它
但是在我的frame里面就一个线程
我唤醒的时候就出错,说是current thread is not the owner.....
2007-07-12 08:31
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 

都试过了
interrupt()会返回interrupt attempt to write lock
yield()肯定不行,我就一个线程,没有其他线程,和没用一样

2007-07-12 10:50
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 

System.exit(0)???
那是终止当前的虚拟机,不是把我的主程序都给断了......

2007-07-12 17:52
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
8楼在线程未启动之前该给那两变量赋什么值?
我也用过类似的方法,用一个布尔值来控制线程
但是能够关闭,重启线程就出错了。
再看一遍线程,研究研究.....
2007-07-13 08:52
快速回复:如何停止线程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025715 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved