My issue is fairly straightforward. My program requires immediate notification if a network connection is lost. I\'m using Java 5, so I\'m unable to use the very handy feature
You need to first create an interface called NetworkListener, for example
public interface NetworkListener {
public void sendNetworkStatus(String status);
}
Next, create a class and call it NetworkStatusThread, for example
public class NetworkStatusThread implements Runnable {
List listenerList = new Vector();
@SuppressWarnings("unchecked")
public synchronized void addNetworkListener(NetworkListener nl) {
listenerList.add(nl);
}
public synchronized void removeNetworkListener(NetworkListener nl) {
listenerList.remove(nl);
}
private synchronized void sendNetworkStatus(String status) {
// send it to subscribers
@SuppressWarnings("rawtypes")
ListIterator iterator = listenerList.listIterator();
while (iterator.hasNext()) {
NetworkListener rl = (NetworkListener)iterator.next();
rl.sendNetworkStatus(status);
}
}
public void run() {
while (true) {
System.out.println("Getting resource status");
try {
Thread.sleep(2000);
System.out.println("Sending resource status to registered listeners");
this.sendResourceStatus("OK");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Then in your class that instantiates the Thread, do this:
NetworkStatusThread netStatus = new NetworkStatusThread();
netStatus.addNetworkListener(this);
Thread t = new Thread(netStatus);
t.Start();
Also, in that class, you need to implement the NetworkListener, in order to get the callbacks.
In your run() method above, you can implement the code by @Ali, but pass my status:
int timeout = 2000;
InetAddress[] addresses = InetAddress.getAllByName("www.google.com");
for (InetAddress address : addresses) {
if (address.isReachable(timeout))
this.sendResourceStatus("OK");
else
this.sendResourceStatus("BAD");
}