Problema con JavaFx - setOnCancelled

di il
2 risposte

Problema con JavaFx - setOnCancelled

Salve a tutti, spero stiate bene…. Avrei questo problema con la suddetta funzione. Quando premo un bottone della mia interfaccia grafica si avvia la funzione “handleButtonAction” che cancella, con successo, il servizio avviato in “initialize” ma nonostante cio' il setOnCancelled non parte e non mi spiego il perchè.. in giro non sono riuscito a trovare nessun esempio di aiuto… confido in voi e ringrazio chi proverà ad aiutarmi. Ecco il codice…

package provaoncancelled;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

/**
 *
 * @author kevin
 */
public class FXMLDocumentController implements Initializable {
    
    @FXML
    private Label label;
    @FXML
    private Button button;
    ServiceX service;
    
    @FXML
    private void handleButtonAction(ActionEvent event) {
        service.cancel();
        service.setOnCancelled(e->{
           System.out.println("Cancellato");
        });
        
    }
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        service = new ServiceX();
        service.start();
        
    }    
    
}

Qui invece la classe ServiceX

package provaoncancelled;

import javafx.concurrent.Service;
import javafx.concurrent.Task;

/**
 *
 * @author kevin
 */
public class ServiceX extends Service<Void>{

    public ServiceX() {
    }

    
    @Override
    protected Task<Void> createTask() {
        return new Task(){
            @Override
            protected Object call() throws Exception {
                for(int c = 0; c < 100000; c++){
                    if(isCancelled())
                        break;
                    System.out.println(c);
                }
                return 0;
            }
            
        };
    }
    
}

2 Risposte

  • Re: Problema con JavaFx - setOnCancelled

    Premetto che non ho mai messo mano a JavaFX, ma come per tutti gli ascoltatori, questi vanno registrati PRIMA che venga scatenato l'evento che essi ascoltano. Tu nel metodo handleButtonAction prima cancelli il lavoro e poi ne registri l'ascoltatore di eventi. Dovresti fare il contrario. Anzi: io fossi in te registrerei l'ascoltatore nel metodo initialize().

  • Re: Problema con JavaFx - setOnCancelled

    07/04/2023 - SpiritoLibero ha scritto:


    Premetto che non ho mai messo mano a JavaFX, ma come per tutti gli ascoltatori, questi vanno registrati PRIMA che venga scatenato l'evento che essi ascoltano. Tu nel metodo handleButtonAction prima cancelli il lavoro e poi ne registri l'ascoltatore di eventi. Dovresti fare il contrario.

    Ciao ti ringrazio molto questa tua risposta ha risolto il mio problema. In ogni caso si, sono uno studente e sto imparando.

Devi accedere o registrarti per scrivere nel forum
2 risposte