Finestra JFrame con processo ciclico in esecuzione

di il
2 risposte

Finestra JFrame con processo ciclico in esecuzione

Salve a tutti,

forse la domanda sarà banale, ma per me che non è molto che programmo non lo è.

Sto compilando un programmino che monitora la raggiungibilità di alcuni apparati in rete tramite ping.
Questo monitoraggio deve avvenire in maniera continua finche tutti gli apparati non risultano "non raggiungibili". Quando questo accadrà, dovrà inoltrare una email al mio indirizzo di posta per avvertirmi.

Ora, ho creato 3 finestre, la prima dove inserire gli indirizzi IP degli apparati, la seconda per la fase di monitoraggio e la terza in caso di emergenza (apparati non raggiungibili).

Con la prima tutto ok, compilo ed inoltro i dati alla seconda. Qui ho sviluppato l'algoritmo per monitorare gli apparati (un semplice ciclo che termina quando gli apparati non sono raggiungibili), ma non riesco ad incorporarlo nella finestra. Mi spiego meglio. Inizialmente ho compilato inserendo il processo di monitoraggio all'interno della main, ma quando mandavo i dati a questa finestra, parte il processo di monitoraggio ma non visualizzo la finestra.
Allora ho fatto diversamente, ho inserito un pulsante di START e quindi al suo interno il processo che parte quando vi clicco sopra, ma una volta avviato, il processo di monitoraggio parte ma il pulsante START resta selezionato e non posso fermarlo con un altro pulsante di STOP perché la finestra non è più in ascolto. (Ho pensato che tutto si blocca finché non termina il loop)

Come faccio a far avviare il processo di monitoraggio e nello stesso momento avere pieno controllo sui pulsanti della finestra? Per esempio, dare uno STOP al processo di monitoraggio in esecuzione.

2 Risposte

  • Re: Finestra JFrame con processo ciclico in esecuzione

    Questo accade perchè non conosci la programmazione concorrente (i thread), né conosci l'interazione tra thread e componenti grafici in Swing; di conseguenza, stai tenendo impegnato l'EDT (Event Dispatch Thread), cioè il thread che si occupa di tutta la gestione dell'interfaccia grafica.

    Nulla di male: ci siamo passati tutti.

    Ti consiglio di documentarti sui thread (e la programmazione concorrente) quindi, di dare un'occhiata a tutto ciò che parla di EDT.

    Puoi partire dal tutorial Oracle sulla Concurrency in Swing.

    Infine, quello che ti servirà per ottenere quello che desideri, si trova nello stesso tutorial, quando parla degli Swing Workers.

    Ciao
  • Re: Finestra JFrame con processo ciclico in esecuzione

    Grazie mille, ho letto dei Thread proprio questa mattina, mi hai confermato che sono sulla strada giusta.
    Grazie anche delle indicazioni.
Devi accedere o registrarti per scrivere nel forum
2 risposte