seguito di classe è quello di lanciare un ascoltatore UDP:JavaFX palco non rispondere dopo l'azione sul pulsante
public class Client extends Application {
UdpListener udp = new UdpListener();
public static void main(String[] args) {
Application.launch();
}
@Override
public void start(Stage stage) {
HBox root = new HBox();
Button startListeningButton = new Button("START LISTEN");
Button stopListeningButton = new Button("STOP LISTEN");
Scene scene = new Scene(root);
root.setSpacing(10);
root.getChildren().addAll(startListeningButton, stopListeningButton);
EventHandler<MouseEvent> handlerStartListen = event -> {
try {
udp.run();
}catch (Exception e) {
e.printStackTrace();
}
};
EventHandler<MouseEvent> handlerStopListen = event -> {
//
};
startListeningButton.addEventFilter(MOUSE_CLICKED, handlerStartListen);
stopListeningButton.addEventFilter(MOUSE_CLICKED, handlerStopListen);
stage.setScene(scene);
stage.setTitle("SNIFFER");
stage.show();
stage.sizeToScene();
}
Sotto UdpListener
:
public class UdpListener implements Runnable {
private final Integer LIST_PORT = 30000;
private final Integer UDP_SIZE = 1472;
private DatagramSocket socket;
private DatagramPacket receivingPacket;
public void run() {
try {
socket = new DatagramSocket(LIST_PORT);
doProcessing();
} catch (Exception e) {
e.printStackTrace();
}
}
public void doProcessing() throws IOException {
while (true) {
String checkAsterix;
String asterixPackData;
byte buff[] = new byte[UDP_SIZE];
receivingPacket = new DatagramPacket(buff, buff.length);
socket.receive(receivingPacket);
buff = receivingPacket.getData();
asterixPackData = new Decode(buff).getHexString();
checkAsterix = asterixPackData.substring(0, Math.min(asterixPackData.length(), 2));
Integer i = Integer.decode("0x" + checkAsterix);
switch (i) {
case (48):
new ShowMessage("TROVATO");
//new atxlib....
break;
default:
new ShowMessage("SCARTO");
break;
}
}
}
}
UdpListener
è un'altra classe che basta aprire un socket per annusare tutte le dati sulla porta XXXX e decodificarli.
Posso avviare direttamente il UdpListener
. Ma se collego questo inizio al codice sopra l'applicazione sembra bloccata anche se funziona.
quando si sposta il cursore del mouse sul tavolino, si passa a "caricamento". Nel frattempo il monitor dell'attività dice "java non risponde".
Qualche suggerimento?
È necessario mostrare cosa fa UdpListener'. –
UdpListener è un processo di lunga durata? In questo caso, stai congelando la GUI perché stai eseguendo tutto sul thread dell'applicazione. –
Ho appena aggiornato la mia domanda con la classe UdpListener –