我用定时器设置一个守护线程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();
}
}
}
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();
}
}
}
要等你再給他個動作,他才會再動的呀
好像是timer.cancel()吧
设置成true 这个就变为守护线程了,就等于是一直运行的啊,守护线程不是这个意思吗?
多开一个保持运行的线程看看
要是在此程序运行期间当然是点到哪个窗口,哪个程序关闭了。
我就在纳闷为什么变成守护线程他就不调用IE了,false时候就可以
有没有方法让他启动那?必须有线程一直运行才可以吗?如果是有别的线程要一直运行的话,我直接把他设置为flase不是更好
或者你要把两者同化的意义
我主要目的就是看能不能设置成true后,有没有好方法让他定时调用IE
设置成false 你也可以继续做你的事情
守护线程只因守护对象存在而存在
T1.start();
Timer timer = new Timer(true);
timer.schedule(new Worker(), 1 * 1000, 20 * 1000);