问一个线程启动的问题!!

alphazhao 2002-04-27 11:08:02
我有一个关于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) {//如在此处捕捉到一个异常,则线程终止
}
}
}
...全文
24 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylanwolf 2002-04-27
  • 打赏
  • 举报
回复
哦,那你的客户程序是怎么启动的?

那就只能将客户程序也通过线程启动了, 然后再通过上述方法由某个主线程控制。
alphazhao 2002-04-27
  • 打赏
  • 举报
回复
唉,我也是刚学java,分很多是从数据库那边的论坛拿的啊
alphazhao 2002-04-27
  • 打赏
  • 举报
回复
我想提一下,我并不是只从新启动waitformsg这个线程,而是包括整个client程序啊
dylanwolf 2002-04-27
  • 打赏
  • 举报
回复
这部分可能要改一下, 不过大体思想就是这样了。


WaitForMsg(Is, Os, ts);

While (1)
{
WaitForMsg.join(); //等待改线程运行结束
if (ts.getSignal())
{
// Exception, 重新启动
ts.setSignal(false);
WaitForMsg(Is, Os, ts);
}
else
{
//正常推出, end the thread
}

}


才发现是 alphazhao(绿色咖啡) , 瓦赛, 比我还多一个三角, 关公面前耍**, 惭愧, 惭愧!
alphazhao 2002-04-27
  • 打赏
  • 举报
回复
多谢,我先试试看!!
dylanwolf 2002-04-27
  • 打赏
  • 举报
回复
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);// 设置信号
}
}
}

alphazhao 2002-04-27
  • 打赏
  • 举报
回复
ok
多谢
先给分,如有问题再找你们……
哈哈



==============================
一家之言,错误难免,仅与阁下共研!
takecare 2002-04-27
  • 打赏
  • 举报
回复
Runtime rt = Runtime.getRuntime();
//获得一个当前系统下运行环境对象
rt.exec("java Client param1 param2");
//运行指定系统命令,如果不在搜索路径中,你需要打全路经(如要执行一个写字板,假设C:\WINNT不在path中,你就需要这样:"c:\\WINNT\\notepad.exe")
alphazhao 2002-04-27
  • 打赏
  • 举报
回复
takecare(大厅)说的那样行吗?
能不能详细说明一下?
比如rt.exec()方法,我看E文帮助文件头都大了



==============================
一家之言,错误难免,仅与阁下共研!
dylanwolf 2002-04-27
  • 打赏
  • 举报
回复
哈哈, 这个主意不错。

咖啡, 就这么干吧。
takecare 2002-04-27
  • 打赏
  • 举报
回复
在你捕获异常后加入下处理:
Runtime rt = Runtime.getRuntime();
try {
rt.exec("java Client param1 param2");
}catch (Exception e1) {}
alphazhao 2002-04-27
  • 打赏
  • 举报
回复
唉,客户端是手工启动啊
所以我向如果在服务器断开或网络不通的时候重连4-5次再结束它,也不知道该如何实现……

62,615

社区成员

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

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