首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

如何重启main方法

2012-12-24 
怎么重启main方法当socket网络中断或出现其他问题的异常时候,需要重启整个main方法 现在是为什么异常会越

怎么重启main方法
当socket网络中断或出现其他问题的异常时候,需要重启整个main方法 现在是为什么异常会越来越多?
前辈们给点指导要怎么处理这样的异常!!
[最优解释]

引用:
当socket网络中断或出现其他问题的异常时候,需要重启整个main方法 现在是为什么异常会越来越多?
前辈们给点指导要怎么处理这样的异常!!


你要做的问题,不是重启main方法;而是有效捕获异常并处理,然后重新执行网络连接之类的工作,类似于:


public static void main(String[] args) {
  while (true) {
    try {
      doSocket();
    }catch(Exception ex) {
      ex.printStackTrace(); // 有异常了
    }
  }
}

public static void doSocket() {
  连接网络或其它动作
}

[其他解释]
start() 里面是啥样的?
[其他解释]
引用:
上面的是出现异常后调用的方法啊!start()是开启整个socket的入口,这样写会不会有问题啊

start是怎么处理?reconnetct是怎么调用?
[其他解释]
看起来楼主的重连会出现 stack overflow,因为如果人家就是把 GPRS 和 Wi-Fi 关了,你这样一直试就会 stack overflow,因为是在几个方法之间循环调用。

推荐不要在 connect 里再 connect。

应该在循环里面 connect 失败了就 loop next。
[其他解释]
开始时这样的异常
2012-07-24 01:55:18,586[main] INFO  Proxy:108 - Connection reset
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:185)
at com.hc.socket.Proxy.decompress(Proxy.java:91)
at com.hc.data.SocketData.upDate(SocketData.java:44)
at com.hc.jdbc.C3poData.start(C3poData.java:581)
at com.hc.jdbc.C3poData.main(C3poData.java:599)

关闭所有socket连接后在次报异常
2012-07-26 18:12:33,667[main] INFO  Proxy:108 - Connection reset
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:185)
at com.hc.socket.Proxy.decompress(Proxy.java:91)
at com.hc.data.SocketData.upDate(SocketData.java:44)
at com.hc.jdbc.C3poData.start(C3poData.java:581)
at com.hc.jdbc.C3poData.stop(C3poData.java:596)
at com.hc.socket.Proxy.ReConnect(Proxy.java:119)
at com.hc.socket.Proxy.decompress(Proxy.java:109)
at com.hc.data.SocketData.upDate(SocketData.java:44)
at com.hc.jdbc.C3poData.start(C3poData.java:581)
at com.hc.jdbc.C3poData.stop(C3poData.java:596)
at com.hc.socket.Proxy.ReConnect(Proxy.java:119)
at com.hc.socket.Proxy.decompress(Proxy.java:109)
at com.hc.data.SocketData.upDate(SocketData.java:44)
at com.hc.jdbc.C3poData.start(C3poData.java:581)
at com.hc.jdbc.C3poData.stop(C3poData.java:596)
at com.hc.socket.Proxy.ReConnect(Proxy.java:119)
at com.hc.socket.Proxy.decompress(Proxy.java:109)
at com.hc.data.SocketData.upDate(SocketData.java:44)
at com.hc.jdbc.C3poData.start(C3poData.java:581)
at com.hc.jdbc.C3poData.stop(C3poData.java:596)
at com.hc.socket.Proxy.ReConnect(Proxy.java:119)
at com.hc.socket.Proxy.decompress(Proxy.java:109)
at com.hc.data.SocketData.upDate(SocketData.java:44)
at com.hc.jdbc.C3poData.start(C3poData.java:581)
at com.hc.jdbc.C3poData.main(C3poData.java:599)


[其他解释]
重启main方法,神马意思?可以把main当作一个普通的static方法调用
如果希望是退出程序重新启动的话,可以加shutdownhook

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        Runtime.getRuntime().exec(javac xxx); //xxx是你想要重启的程序
    }
});
然后终止程序,就能触发hook了
[其他解释]
引用:
引用:
当socket网络中断或出现其他问题的异常时候,需要重启整个main方法 现在是为什么异常会越来越多?
前辈们给点指导要怎么处理这样的异常!!


你要做的问题,不是重启main方法;而是有效捕获异常并处理,然后重新执行网络连接之类的工作,类似于:


Java code
public static void main(String[] args) {
 ……


我确实是这样做的,我是从服务器上面接受数据的时候,当网络出现问题捕获了异常就需要重新启动socket了啊,可是有时候得到异常就不会去执行启动方法了
报异常了执行下面ReConnect()方法

public boolean ReConnect() {
try {
close();
Thread.sleep(5000);
C3p0Data.start();
} catch (Exception e) {
logger.info(e.getMessage(), e);
}
return true;
}
// 关闭连接
public void close() {
try {
if(!socket.isConnected()){
socket.close();
br.close();
is.close();
gis.close();
bis.close();
}
} catch (Exception e) {
logger.info(e.getMessage(), e);
}
}
这是启动的main方法
public static void main(String[] args) {
start();
}
[其他解释]
引用:
重启main方法,神马意思?可以把main当作一个普通的static方法调用
如果希望是退出程序重新启动的话,可以加shutdownhook
Java code
Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        Runtime.getRuntime().exec(javac……

宝哥,你这个是不是关闭javac程序后在重新打开这个javac?
[其他解释]
没看出来你4楼贴出来的代码有重试的机制,只是看到捕获异常而已了。
[其他解释]
上面的是出现异常后调用的方法啊!start()是开启整个socket的入口,这样写会不会有问题啊
[其他解释]
该回复于2012-08-01 14:26:45被版主删除
[其他解释]
public static void start(){
  while (true) {
String result = proxy.decompress();
}
}
public String decompress() {
String str = null;
StringBuffer sb = new StringBuffer();
int len = 0;
try {
socket.sendUrgentData(0xFF);
dis = socket.getInputStream();
len =dis.read() + (dis.read()<<8) + (dis.read()<<16) + (dis.read()<<24);
if (len <= 0) {
return null;
}
int total = len;
int bytesRead = 0;
byte[] input = new byte[total];
while (bytesRead < total) {
bytesRead += dis.read(input, bytesRead, total - bytesRead);
}
try {
bis = new ByteArrayInputStream(input);
gis = new GZIPInputStream(bis);


is = new InputStreamReader(gis, "GBK");
br = new BufferedReader(is);
while ((str = br.readLine()) != null) {
sb.append(str + "\n");
}
} catch (Exception e) {
logger.info(e.getMessage(), e);
}
is.close();
gis.close();
bis.close();
} catch (Exception e) {
logger.info(e.getMessage(), e);
ReConnect();
}
return sb.toString();
}

[其他解释]

引用:
start() 里面是啥样的?

当然还有些其他的,但是牵扯到很多方法,就不写进去了,如果,可以的话帮我看下源码吧,这个问题折磨我几个月了...

热点排行