Practice Every Day_2
来源:互联网 发布:mac语言设置 编辑:程序博客网 时间:2024/06/03 19:38
看看我改进之后的计时器,以下是代码:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Counter extends Applet
{
private class SeparateSubTask extends Thread
{
int count=0;
boolean runFlag=true;
SeparateSubTask()
{
start();
}
public void run()
{
while(true)
{
try{
Thread.sleep(1000);
}
catch(InterruptedException e){}
if(runFlag)
t.setText(Integer.toString(count++));
}
}
}
private SeparateSubTask sp=null;
private TextField t=new TextField(10);
private Button onOff=new Button("关闭"),
start=new Button("开始");
public void init()
{
add(t);
start.addActionListener(new StartL());
add(start);
onOff.addActionListener(new OnOffL());
add(onOff);
}
class StartL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if (sp==null);
sp=new SeparateSubTask();
}
}
class OnOffL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(sp!=null)
sp.runFlag=!sp.runFlag;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Counter applet=new Counter();
Frame MyFrame=new Frame("线程与窗口的结合");
MyFrame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
MyFrame.add(applet,BorderLayout.CENTER);
MyFrame.setSize(300,200);
applet.init();
applet.start();
MyFrame.setVisible(true);
}
}
效果图:
现在计时器可以从一开始计时,并且暂停之后,再次开始时是从暂停的地方开始的。
下面是创建多个这样的计时器的代码:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
class Ticker extends Thread
{
private Button b=new Button("暂停");
private TextField t=new TextField(10);
private int count=0;
private Boolean runFlag=true;
public Ticker(Container c)
{
Panel p=new Panel();
b.addActionListener(new ToggleL());
p.add(b);
p.add(t);
c.add(p);
}
class ToggleL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
runFlag=!runFlag;
}
}
public void run()
{
while(true)
{
if(runFlag)t.setText(Integer.toString(count++));
try{sleep(1000);}
catch(InterruptedException e){}
}
}
}
public class Counter1 extends Applet
{
private Button start=new Button("开始");
private boolean started=false;
private Ticker[]s;
private boolean isApplet=true;
private int size;
public void init()
{
if(isApplet)size=5;
//Integer.parseInt(getParameter("size"));
s=new Ticker[size];
for(int i=0;i<s.length;i++)
s[i]=new Ticker(this);
start.addActionListener(new StartL());
add(start);
}
class StartL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(!started){
started=true;
for(int i=0;i<s.length;i++)
s[i].start();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Counter1 applet=new Counter1();
applet.isApplet=false;
applet.size=(args.length==0?5:Integer.parseInt(args[0]));
Frame MyFrame=new Frame("Counter1");
MyFrame.addWindowListener(new WindowAdapter()
{ public void WindowClosing(WindowEvent e)
{
System.exit(0);
}
} );
MyFrame.add(applet,BorderLayout.CENTER);
MyFrame.setSize(200,applet.size*50);
applet.init();
applet.start();
MyFrame.setVisible(true);
}
}
效果图如下:
但是同样存在问题,那就是点击开始按钮之后,所有线程都开始了。如下图所示:
不过,暂停按钮可以控制所对应的线程的休息。如下图所示:
- Practice Every Day_2
- Practice Every Day_3
- Practice Every Day_4
- Practice Every Day_5
- Practice Every Day_8
- Practice Every Day_13
- Day_2
- DAY_2
- Day_2.
- Practice Every Day_9(更新索引)
- Practice Every Day_6 (Lucene 小练习)
- Practice Every Day_16(添加索引)
- Practice Every Day_17(Map集合小练习)
- Practice Every Day_7(Lucene3.5小练习)
- Practice Every Day_11(用HtmlParser解析Html文件)
- Practice Every Day_12(精确搜索和模糊搜索)
- Robin Hu的专栏Let's practice improving every day
- day_2 TOMCAT
- TEMP临时表空间过大的处理方法
- 《人件》 精华版 为软件企业指明成功之路 为开发人员伸张权益
- Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息(转)
- Exercises 4-3
- 魔鬼在细节中
- Practice Every Day_2
- 关于_beginthreadex、_beginthread和CreateThread
- Linux 下用ps查找进程并用kill终止命令
- QuickDialog
- csdn二次培训 第四课
- 黑马程序员-枚举、常量、结构
- 网编工具:什么是记事本最佳的替代工具
- 中断的详解
- makfile 中 $$ 变量的含义