英文:
IOException generated when I run the following code for check the internet availability
问题
以下是翻译好的部分:
我开发了一个应用程序,其中我不断地监控互联网连接。当我运行应用程序并且有可用的互联网/ WiFi连接时,不会出现异常。一旦WiFi或互联网断开连接,就会出现问题。
private void detectnetworkloss() {
Thread timer = new Thread() {
@Override
public void run() {
for (;;) {
try {
Socket socket = null;
String host = "www.google.com";
int port = 80;
int timeOutInMilliSec = 5000;
socket = new Socket();
socket.connect(new InetSocketAddress(host, port), timeOutInMilliSec);
socket.close();
wifi.setIcon(new ImageIcon(getClass().getResource("Resources/images/connect1.png")));
} catch (IOException e) {
wifi.setIcon(new ImageIcon(getClass().getResource("Resources/images/disconnect1.png")));
e.printStackTrace();
}
try {
sleep(100);
} catch (InterruptedException e) {
//e.printStackTrace();
}
}
}
};
timer.start();
}
以下是异常信息:
java.net.SocketTimeoutException: 连接超时
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at turbine_stats.Main_Frame$2.run(Main_Frame.java:235)
java.net.NoRouteToHostException: 无法连接到主机:No route to host
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at turbine_stats.Main_Frame$2.run(Main_Frame.java:235)
请协助我解决这个问题。
谢谢。
英文:
I developed an application in which I check the internet connection monitoring continuously. When I run the application and internet/WiFi is available no Exceptions occur. An issue occurs as soon as WiFi or Internet disconnects.
private void detectnetworkloss() {
Thread timer=new Thread(){
@Override
public void run(){
for(;;) {
//InetSocketAddress address= new InetSocketAddress("www.google.com",80);
try{
Socket socket=null;
String host="www.google.com";
int port=80;
int timeOutInMilliSec=5000;
socket= new Socket();
socket.connect(new InetSocketAddress(host, port), timeOutInMilliSec);
socket.close();
wifi.setIcon(new ImageIcon(getClass().getResource("Resources/images/connect1.png")));
}catch(IOException e){
wifi.setIcon(new ImageIcon(getClass().getResource("Resources/images/disconnect1.png")));
e.printStackTrace();
}
try{
sleep(100);
}catch(InterruptedException e){
//e.printStackTrace();
}
}
}
};
timer.start();
}
Exception as follows:
java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at turbine_stats.Main_Frame$2.run(Main_Frame.java:235)
java.net.NoRouteToHostException: No route to host: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at turbine_stats.Main_Frame$2.run(Main_Frame.java:235)
Please assist me in solving it?
Regards
答案1
得分: 0
这就是罐子上写的内容 - 如果没有网络,您会得到“无法路由到主机”异常,我猜这就是您想要的 - 您期望这种情况发生并捕获IOException(SocketTimeoutException是IOException的子类)。虽然我认为您不需要在catch块中调用e.printStackTrace()。捕捉它,检测断开连接,继续进行。
英文:
It is what is says on the tin - you get No route to host
exception if there's no internet, which I guess is what you are after - you expect this to happen and catch IOException (SocketTimeoutException is subclass of IOException). Although I don't think you need to call e.printStackTrace() in the catch block. Catch it, detect disconnect, go on.
专注分享java语言的经验与见解,让所有开发者获益!
评论