她为什么不运行,你知道吗?

zhuyx808 2008-03-21 10:56:52
我用定时器设置一个守护线程new Timer(true),她就根本不运行,new Timer(false)她就运行了,到底怎么回事哦,是不是多线程的问题?代码如下. 例子的目的就是调用IE 输入进去www 然后用ALT+F4 关掉IE

import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

public class Test {
public static void main(String[] args) throws Exception {
Timer timer = new Timer(true); //设置true就不运行,为false就能正常运行,为什么???

timer.schedule(new Worker(),10*1000,20*1000); //10秒后调用,每隔20秒调用
}
}
class Worker extends TimerTask {
public void run() {
Thread T1 = new Thread(new SellThreadA() );
Thread T2 = new Thread(new SellThreadB() );
Thread T3 = new Thread(new SellThreadC() );
T1.start();

try {
T2.sleep(3000);
T2.start();
T3.sleep(7000);
T3.start();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

class SellThreadA implements Runnable {
String s="";

public void run() {
try {
Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE ");//调用IE
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

class SellThreadB implements Runnable {
public void run() {
try {
Robot r = new Robot();

r.keyPress(KeyEvent.VK_W);
r.keyRelease(KeyEvent.VK_W);
r.keyPress(KeyEvent.VK_W);
r.keyRelease(KeyEvent.VK_W);
r.keyPress(KeyEvent.VK_W);
r.keyRelease(KeyEvent.VK_W);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class SellThreadC implements Runnable {
public void run() {
try {
Robot r = new Robot();

r.keyPress(KeyEvent.VK_ALT);
r.keyPress(KeyEvent.VK_F4);
r.keyRelease(KeyEvent.VK_ALT);
r.keyRelease(KeyEvent.VK_F4);

} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

...全文
154 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyx808 2008-03-21
  • 打赏
  • 举报
回复
守护线程不调用,那守护线程存在的意义在哪里?我个人认为守护线程就是为了调用其他程序或者线程而存在,既然写了守护线程那他就要按时或按事件而调用其他线程或程序,可能是写的这个程序哪个地方不对,或者守护线程不是这样写的,希望能给出个按时或按事件激发操作的例子,在此先谢过帮忙
dracularking 2008-03-21
  • 打赏
  • 举报
回复
daemon也只是一个线程而已
设置成false 你也可以继续做你的事情
守护线程只因守护对象存在而存在
zhuyx808 2008-03-21
  • 打赏
  • 举报
回复
我设置成true的意思就是把这个程序运行完后 我就继续做我的事情,eclipse一直亮红灯看着不爽的吧,假如现在设置成了true还想保持调用IE,那我是不是必须搞一个另外的线程保持一直运行?这个一直运行的线程的目的还是为了更好的调用IE,既然让另外的一个线程保持运行,那我就直接把这个设置成false不就得了,反正就是为了调用IE而已,


我主要目的就是看能不能设置成true后,有没有好方法让他定时调用IE
dracularking 2008-03-21
  • 打赏
  • 举报
回复
那说说你不设置成false的理由
或者你要把两者同化的意义
zhuyx808 2008-03-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dracularking 的回复:]
daemon是低优先级线程 在没有其它线程运行的情况下 没等启动程序就over了
[/Quote]

有没有方法让他启动那?必须有线程一直运行才可以吗?如果是有别的线程要一直运行的话,我直接把他设置为flase不是更好
dracularking 2008-03-21
  • 打赏
  • 举报
回复
daemon是低优先级线程 在没有其它线程运行的情况下 没等启动程序就over了
zhuyx808 2008-03-21
  • 打赏
  • 举报
回复
没人操作的情况下是关闭IE的。
要是在此程序运行期间当然是点到哪个窗口,哪个程序关闭了。
我就在纳闷为什么变成守护线程他就不调用IE了,false时候就可以
dracularking 2008-03-21
  • 打赏
  • 举报
回复
我估摸着你的程序只有一个Daemon线程 所以启动不了
多开一个保持运行的线程看看
dracularking 2008-03-21
  • 打赏
  • 举报
回复
哦没看到Alt F4
dracularking 2008-03-21
  • 打赏
  • 举报
回复
你这程序好像还能关闭eclipse啊 有没有这种情况
zhuyx808 2008-03-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yami251139 的回复:]
你設成true以后,總歸是要停下來的咯,去看api
要等你再給他個動作,他才會再動的呀
好像是timer.cancel()吧
[/Quote]

设置成true 这个就变为守护线程了,就等于是一直运行的啊,守护线程不是这个意思吗?
yami251139 2008-03-21
  • 打赏
  • 举报
回复
你設成true以后,總歸是要停下來的咯,去看api
要等你再給他個動作,他才會再動的呀
好像是timer.cancel()吧
zhuyx808 2008-03-21
  • 打赏
  • 举报
回复
自己顶起来
zhuyx808 2008-03-21
  • 打赏
  • 举报
回复
查了下相关资料,有点理解了
zhuyx808 2008-03-21
  • 打赏
  • 举报
回复
好像还是不对哦
dracularking 2008-03-21
  • 打赏
  • 举报
回复
守护线程调用只是执行了守护职责 但却没有守护对象(虽然之后产生了产生了 但却是之后) 这是违背守护线程初衷的

试试这个吧

Thread T1 = new Thread(new SellThreadA());
T1.start();
Timer timer = new Timer(true);
timer.schedule(new Worker(), 1 * 1000, 20 * 1000);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧