groupMonitor.run ("", "") прослушивает через IP-сеть некоторые электрические компоненты.
Проблема: все 5-6 часов groupMonitor.run (" "," ") вылетает и требует повторного вызова. Быстро сказано: groupMonitor.run ("", "") должен все время прослушивать через IP-сеть.
Другая проблема: когда groupMonitor.run ("", "") сбой, он печатает все 100 мсек "redo groupMonitor ..." и так сильно рассылает мою сеть, что мой IP-шлюз (который принимает соединения) зависает и отклоняет все будущие входящие запросы
Это минимизированная основная, так сказать
GroupMonitorOrig groupMonitor = new GroupMonitorOrig();
//when new groupMonitor is created the boolean MonitorExited is initialized with true
while (true) {
if (groupMonitor.monitorExited) { //this part gets executed when groupMonitor.run("", "") method has "crashed"
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
System.out.println("redo groupMonitor ... ");
groupMonitor.run("192.168.1.7", 2169);
} catch (Exception ex) {
}
}
};
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, 0, 100, TimeUnit.MILLISECONDS);
}
try {
TimeUnit.SECONDS.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
Это функция запуска группового монитора
public void run(String remoteHost, int port) {
final InetSocketAddress remote = new InetSocketAddress(remoteHost, port);
try (KNXNetworkLink knxLink = KNXNetworkLinkIP.newTunnelingLink(null, remote, false, TPSettings.TP1);
ProcessCommunicator pc = new ProcessCommunicatorImpl(knxLink)) {
// start listening to group notifications using a process listener
pc.addProcessListener(this);
System.out.println("Monitoring network using net/IP server " + remoteHost + " ...");
while (knxLink.isOpen()) {
Thread.sleep(1000);
}
monitorExited = false;
pc.detach();
} catch (final KNXException | InterruptedException | RuntimeException e) {
System.err.println(e);
monitorExited = true;
}
}