我用定时器设置一个守护线程new Timer(true),她就根本不运行,new Timer(false)她就运行了,到底怎么回事哦,是不是多线程的问题?代码如下. 例子的目的就是调用IE 输入进去www 然后用ALT+F4 关掉IEimport 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();
}
}
}

解决方案 »

  1.   

    你設成true以后,總歸是要停下來的咯,去看api
    要等你再給他個動作,他才會再動的呀
    好像是timer.cancel()吧
      

  2.   


    设置成true 这个就变为守护线程了,就等于是一直运行的啊,守护线程不是这个意思吗?
      

  3.   

    你这程序好像还能关闭eclipse啊 有没有这种情况
      

  4.   

    我估摸着你的程序只有一个Daemon线程 所以启动不了
    多开一个保持运行的线程看看
      

  5.   

    没人操作的情况下是关闭IE的。
    要是在此程序运行期间当然是点到哪个窗口,哪个程序关闭了。
    我就在纳闷为什么变成守护线程他就不调用IE了,false时候就可以
      

  6.   

    daemon是低优先级线程 在没有其它线程运行的情况下 没等启动程序就over了
      

  7.   


    有没有方法让他启动那?必须有线程一直运行才可以吗?如果是有别的线程要一直运行的话,我直接把他设置为flase不是更好
      

  8.   

    那说说你不设置成false的理由
    或者你要把两者同化的意义
      

  9.   

    我设置成true的意思就是把这个程序运行完后 我就继续做我的事情,eclipse一直亮红灯看着不爽的吧,假如现在设置成了true还想保持调用IE,那我是不是必须搞一个另外的线程保持一直运行?这个一直运行的线程的目的还是为了更好的调用IE,既然让另外的一个线程保持运行,那我就直接把这个设置成false不就得了,反正就是为了调用IE而已,
    我主要目的就是看能不能设置成true后,有没有好方法让他定时调用IE
      

  10.   

    daemon也只是一个线程而已
    设置成false 你也可以继续做你的事情
    守护线程只因守护对象存在而存在
      

  11.   

    守护线程调用只是执行了守护职责 但却没有守护对象(虽然之后产生了产生了 但却是之后) 这是违背守护线程初衷的试试这个吧Thread T1 = new Thread(new SellThreadA());
    T1.start();
    Timer timer = new Timer(true); 
    timer.schedule(new Worker(), 1 * 1000, 20 * 1000);