Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] thread per annullare un'operazione

    Ciao a tutti

    Sto costruendo un piccolo programma per studiare ::JAVA::

    Il programma contiene una finestra con due bottoni: uno fa partire un ciclo che stampa in un Frame dei numeri, l'altro dovrebbe permettere di stoppare il ciclo e, se premuto ancora, di riprenderlo.

    Come posso implementare il tutto?
    Ho pensato di utilizzare i Thread:
    nel principale (il main) creo il Frame, poi in un'altra classe (che non utilizza Thread) gestisco gli eventi e richiamo una terza classe, quella che utilizza un Thread separato dal principale, che dà il via al conteggio dei numeri, e che dovrebbe farlo smettere..

    Il problema è che quando parte il ciclo, se io clicco sul pulsante per sospendere, il ciclo va comunque avanti (anzi, a dire il vero mi blocca un pò la grafica della finestra, clicco ma il bottone non appare premuto..).
    Soltanto quando finisce il ciclo, riconosce che ho premuto il pulsante.

    Come posso fare per farlo interrompere? Ho provato con un flag di tipo volatile, ma non riesce..

  2. #2
    Utente di HTML.it L'avatar di Gondor
    Registrato dal
    Oct 2000
    Messaggi
    2,722
    Spostato su Programmazione
    File reality.sys corrupted
    Reboot universe? y/n
    Non arrabbiarti. Tanto un giorno il mondo farà a meno di te

  3. #3
    Senza il codice di tutte e 3 le classi è dura....
    se potresti mandarlo...
    Blink@go

    "Non tutto quel che è oro brilla, Ne gli erranti sono perduti; Il vecchio ch'è forte non s'aggrinza, Le radici profonde non gelano.Dalle ceneri rinascerà un fuoco, L'ombra sprigionerà una scintilla, Nuova sarà la lama ormai rotta, E re quei ch'è senza corona."

    ------------
    Lang: java 1.4.1 Eclipse

  4. #4
    Nel thread, dichiari una variabile di tipo boolean e statica, che indica se devi stampare il numero
    poi implementi un metodo (anch'esso statico) che setta la variabile
    quindi, nella classe che genera il Thread e in cui stanno i due bottoni, al click del bottone decidi, a seconda dei casi, di richiamare il metodo del thread che setta il booleano con valori opposti

    tipo, clicco su go -> thread.setBoolean(true)
    clicco su stop -> thread.setBoolean(false)

    e nel thread, prima di stampare il numero, non devi fare altro che controllare la variabile booleana
    23-08-2005: Udinese in cémpions lìg
    Questa estate l'ho passata a Tallin

  5. #5
    Grazie Pippo, stasera provo e ti faccio sapere.

    Non avevo provato con un boolean e un metodo statico..

    Quindi secondo la tua soluzione non occorre usare variabili volatile?

  6. #6
    è la prima soluzione che mi è venuta in mente, e mi sembra anche semplice da implementare
    di solito una variabile volatile si utilizza quando + Thread devono modificare il suo valore in maniera asincrona

    certo nulla ti vieta di utilizzarla anche qua
    23-08-2005: Udinese in cémpions lìg
    Questa estate l'ho passata a Tallin

  7. #7
    Ho risolto!

    Ho utilizzato un flag volatile, e il metodo wait() in un metodo synchronized.

    La "svolta" è stata, nella classe che implementa le interfacce window/action listener per la gestione degli eventi, implementare anche Runnable, e creare un nuovo Thread proprio con questa classe.

    Finchè non facevo cosi, l'applicazione si bloccava finchè il ciclo che stampava i risultati non terminava.

    Da quello che sapevo.. il main() è già un Thread, pensavo non fosse necessario crearne un altro ancora per gli eventi..

    Grazie a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.