java 线程之间传递异常 懂的进!
我现在在做一个android的程序
思路如下:假设我的程序连接服务器时间太长,或者根本不能连接到服务器,那么我规定在一定的时间比如3s或者5s之后我的程序就弹出一个不能连接的框
那么我要写一个定时器,思路是用一个守护线程,从连接之前start();让其sleep到我规定的时间,如果这段时间还没有连接成功,就报一个TimeoutException异常
但问题是,java的异常机制是向上捕获。也就是说会一层一层的向上去请求处理,没有说在线程之间可以捕获到的
那么问题来了1:如果我的这种方法不可行,请有做过类似东西的人给其他方案
2:有么有方法可以让主线程捕获到守护线程的异常
public class Test1 extends Thread{ public boolean isCanceled; @Override public void run() throws NullPointerException{ throw new NullPointerException(); }}public class Test2 extends Thread{ @Override public void run(){ try{ new Test1().start(); }catch(NullPointerException e){ System.out.println("helloworld"); e.printStackTrace(); } } public static void main(String[] args) { new Test2().start(); }}
}
}
class Test1 extends Thread{
public boolean isCanceled;
Exception ex=null;
@Override
public void run()throws NullPointerException {
try {
sleep(5000);//等待5秒
if(true){ //这里条件是没连接上
ex=new NullPointerException();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Test2 extends Thread{
public Test1 x=null;
Test2(Test1 x){
this.x=x;
}
public void run(){
try{
x.start(); //线程启动
try {
sleep(6000); //等待6秒钟
} catch (InterruptedException e) {
e.printStackTrace();
}
if(x.ex!=null) //
throw (NullPointerException)x.ex;
}catch(NullPointerException e){
System.out.println("helloworld");
e.printStackTrace();
}
System.out.print("ssssssssssssssssss");
}
}
我勒个去 想了一个不太好的方法 实现了进程间的异常传递;
貌似可以使用!!!
程序关键点:
睡眠等待 调用线程等待时间长于被掉线程;
[解决办法]
有个概念你要清楚。调用一个新线程之后,主线程不会等待,会继续执行后面的代码。以你的愿意。4秒后才能判断是否异常,那时候主线程都不知道走哪去了。这种思路本身就是错的。