当前位置: 技术问答>java相关
问一个线程启动的问题!!
来源: 互联网 发布时间:2015-05-18
本文导语: 我有一个关于socket的客户端 在客户端主程序中 public class Client { public static void main(String[] args) { …… 只启动WaitForMsg线程 } } 如果WaitForMsg线程中捕捉到异常则会结束整个程序,我想问一下,如果WaitForMsg...
我有一个关于socket的客户端
在客户端主程序中
public class Client {
public static void main(String[] args) {
…… 只启动WaitForMsg线程
}
}
如果WaitForMsg线程中捕捉到异常则会结束整个程序,我想问一下,如果WaitForMsg线程里面捕捉到异常终止了,我怎么才能够重新启动客户端?
即在WaitForMsg结束的情况下从新执行class Client?
下面是捕捉异常的例子
public class WaitForMsg extends Thread {
public WaitForMsg(InputStream Is, OutputStream Os) {
……
}
public run {
try {
……
}
catch(Exception e) {//如在此处捕捉到一个异常,则线程终止
}
}
}
在客户端主程序中
public class Client {
public static void main(String[] args) {
…… 只启动WaitForMsg线程
}
}
如果WaitForMsg线程中捕捉到异常则会结束整个程序,我想问一下,如果WaitForMsg线程里面捕捉到异常终止了,我怎么才能够重新启动客户端?
即在WaitForMsg结束的情况下从新执行class Client?
下面是捕捉异常的例子
public class WaitForMsg extends Thread {
public WaitForMsg(InputStream Is, OutputStream Os) {
……
}
public run {
try {
……
}
catch(Exception e) {//如在此处捕捉到一个异常,则线程终止
}
}
}
|
在你捕获异常后加入下处理:
Runtime rt = Runtime.getRuntime();
try {
rt.exec("java Client param1 param2");
}catch (Exception e1) {}
Runtime rt = Runtime.getRuntime();
try {
rt.exec("java Client param1 param2");
}catch (Exception e1) {}
|
Interface mySignal
{
bool bException; // 是否发生 exception
bool getSignal();
void setSignal(bool sig);
}
class threadSignal implements mySignal
{
threadSignal()
{
bRunning = false;
}
bool getSignal()
{
return bException;
}
void setSignal(bool sig)
{
bException = sig;
}
}
public class Client {
private threadSignal ts = new threadSignal;
public static void main(String[] args) {
…… 只启动WaitForMsg线程
WaitForMsg(Is, Os, ts);
While (1)
{
WaitForMsg.join(); //等待改线程运行结束
if (ts.getSignal())
{
// Exception, 重新启动
ts.setSignal(false);
WaitForMsg(Is, Os, ts);
}
else
{
//正常推出, end the thread
}
}
}
}
public class WaitForMsg extends Thread {
public WaitForMsg(InputStream Is, OutputStream Os, mySignal sg) {
……
}
public run {
try {
……
}
catch(Exception e) {//如在此处捕捉到一个异常,则线程终止
sg.setSignal(true);// 设置信号
}
}
}
{
bool bException; // 是否发生 exception
bool getSignal();
void setSignal(bool sig);
}
class threadSignal implements mySignal
{
threadSignal()
{
bRunning = false;
}
bool getSignal()
{
return bException;
}
void setSignal(bool sig)
{
bException = sig;
}
}
public class Client {
private threadSignal ts = new threadSignal;
public static void main(String[] args) {
…… 只启动WaitForMsg线程
WaitForMsg(Is, Os, ts);
While (1)
{
WaitForMsg.join(); //等待改线程运行结束
if (ts.getSignal())
{
// Exception, 重新启动
ts.setSignal(false);
WaitForMsg(Is, Os, ts);
}
else
{
//正常推出, end the thread
}
}
}
}
public class WaitForMsg extends Thread {
public WaitForMsg(InputStream Is, OutputStream Os, mySignal sg) {
……
}
public run {
try {
……
}
catch(Exception e) {//如在此处捕捉到一个异常,则线程终止
sg.setSignal(true);// 设置信号
}
}
}