JavaFX Stage wird nicht angezeigt

Diskutiere Stage wird nicht angezeigt im AWT, Swing, JavaFX & SWT Bereich.
K

Kenta1561

Hallo,

ich versuche gerade ein Programm zu schreiben, welches Daten von einer Excel-Tabelle in eine Datenbank importieren kann. Dabei soll auch gleichzeitig noch in Echtzeit gezeigt werden, wie viel Prozent importiert wurden mit Hilfe eines ProgressBars.

Hier sind die zwei Methoden, die ich geschrieben habe (sind Teil eines großen Programms):
Die Import-Methode: (Sieht chaotisch aus, geht jetzt aber nur um das Problem)
Java:
public void importData(File file, int dateColumn, int categoryColumn, int descriptionColumn, int incomeColumn,
                       int expenseColumn, int creditCardColumn, int startingRow, double endingRow) {
    try {
        //region Decrementation
        dateColumn--;
        categoryColumn--;
        descriptionColumn--;
        incomeColumn--;
        expenseColumn--;
        creditCardColumn--;
        startingRow--;
        endingRow--;
        //endregion
        Workbook workbook;
        if(file.getName().endsWith(".xlsx")) {
            workbook = new XSSFWorkbook(file);
        } else if(file.getName().endsWith(".xls")) {
            workbook = new HSSFWorkbook(new FileInputStream(file));
        } else {
            Main.showAlert(Alert.AlertType.ERROR, "Wrong file format", "Not a valid" +
                    " file format", "The file you have chosen has an invalid file format. Please make sure" +
                    " that the file format is .xlsx or .xls.");
            return;
        }
        Sheet sheet = workbook.getSheetAt(0);
        showProgressStage(); //Hier wird die Methode aufgerufen, die den progress stage zeigen soll
        for(double rowCounter = startingRow; rowCounter <= endingRow; rowCounter++) {
            //Progress indication
            System.out.println(rowCounter / endingRow); //Nur zu Testzwecken geschrieben
            progressBar.setProgress(rowCounter / endingRow); //Hier wird mein progress gesetzt
            //Excel data processing
            Row row = sheet.getRow((int)rowCounter);
            LocalDate localDate = dateToLocalDate(row.getCell(dateColumn).getDateCellValue());
            String category = row.getCell(categoryColumn).getStringCellValue();
            String description = row.getCell(descriptionColumn).getStringCellValue();
            double income = row.getCell(incomeColumn).getNumericCellValue();
            income = Math.round(income * 100);
            income = income / 100;
            double expense = row.getCell(expenseColumn).getNumericCellValue();
            expense = Math.round(expense * 100);
            expense = expense / 100;
            dbManager.addContentData(new ContentData(localDate, category, description, income, expense));
        }
        progressStage.close(); //Hier wird das progress Fenster geschlossen
        workbook.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Die showProgressStage()-Methode:
Java:
private void showProgressStage() {
    //Components
    Label importProgressLabel = new Label("Import Progress");
    importProgressLabel.setLayoutX(88);
    importProgressLabel.setLayoutY(30);
    importProgressLabel.setTextFill(Paint.valueOf("#30ffa2"));
    importProgressLabel.setFont(new Font("Microsoft YaHei UI Light", 24));
    progressBar = new ProgressBar();
    progressBar.setPrefWidth(300);
    progressBar.setLayoutX(25);
    progressBar.setLayoutY(80);
    progressLabel = new Label();
    progressLabel.setPrefSize(86, 19);
    progressLabel.setLayoutX(132);
    progressLabel.setLayoutY(115);
    //Pane, Scene, Stage
    Pane pane = new Pane(importProgressLabel, progressBar, progressLabel);
    pane.setPrefSize(350, 150);
    Scene scene = new Scene(pane);
    progressStage = new Stage();
    progressStage.setScene(scene);
    progressStage.setTitle("Import Progress");
    progressStage.show();
}
Das Problem ist, dass mein Stage zwar auftaucht, aber gar keine Nodes angezeigt werden.

Es scheint so zu sein, dass die Excel-Datei Verarbeitung zu viel Leistung abzieht, denn wenn ich das gleiche nur mit einem normalen Zahlencounter ohne Excel-Verarbeitung mache, wird die Stage samt Nodes angezeigt.

Habe ich irgendetwas wichtiges übersehen oder was kann man hier machen?

LG
Kenta1561
 
K

knilch

Hi,
So wie ich aus deinen beiden code-snippets sehe, wird der Import gestartet. Dabei wird gleichzeitig ein Progressdialog gestartet. Das Problem bei dieser umsetztung ist, dass sobald der import gestartet wird, der Progressdialog eingefroren wird.
Hier mal eine Variante, wie du es vielleicht umsetzten könntest:
Java:
import javafx.concurrent.Task;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.WindowEvent;

public class ProgressDialog {
    private final Stage dialogStage;
    private final ProgressBar progressBar = new ProgressBar();
    private final Label label1 = new Label();
    private final Label label2 = new Label();

    public ProgressDialog(String title) {
        dialogStage = new Stage();
        dialogStage.initStyle(StageStyle.UTILITY);
        dialogStage.setResizable(false);
        dialogStage.initModality(Modality.APPLICATION_MODAL);
        dialogStage.setTitle(title);
        dialogStage.setWidth(340);
        dialogStage.setHeight(140);
     
    
        // disable the close button on dialog
        dialogStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
            @Override
            public void handle(WindowEvent event) {
                 event.consume();             
            }
        });
     
        progressBar.setProgress(-1F);
        progressBar.setPrefWidth(320);
        progressBar.setPrefHeight(35);

        final VBox vBox = new VBox();
        VBox.setMargin(label1, new Insets(10, 10, 10, 10));
        vBox.setAlignment(Pos.CENTER);
        VBox.setMargin(label2, new Insets(10, 10, 10, 10));
        vBox.setAlignment(Pos.CENTER);
        VBox.setMargin(progressBar, new Insets(10, 10, 10, 10));
        vBox.getChildren().addAll(label1, label2, progressBar);

        Scene scene = new Scene(vBox);
        dialogStage.setScene(scene);
    }

    public void activateProgressBar(final Task<?> task)  {
        progressBar.progressProperty().bind(task.progressProperty());
        dialogStage.show();
    }
 
    public void updateLabel1Text(String text) {
        label1.setText(text);
    }
 
    public void updateLabel2Text(String text) {
        label2.setText(text);
    }

    public Stage getDialogStage() {
        return dialogStage;
    }
}
und hier noch ein Beispiel wie dieser Dialog dann aufgerufen wird:
In der Methode loadDirectory() wird dann die Arbeit gestartet, die länger dauern kann und gleichzeitig die Progressbar updated.
Java:
    /**
     * Method to start long working
     */
    private void loadDirectory() {
        ProgressDialog progressDialog = new ProgressDialog("Datenstruktur laden ...");
        Task<Integer> task = new Task<Integer>() {
            @Override
            public Integer call() throws InterruptedException {
                // hier wieder der länger dauernde  conde gestartet.
               // das wäre dann auch der Ort, in dem deine Arbeit für den Import der Exceldaten gestartet werden sollte.
                return modelController.checkLoadedDirectory(selectedDirectory);
            }
        };
        progressDialog.updateLabel1Text("Bitte warten, die Daten werden geladen...");
        progressDialog.updateLabel2Text("(Das Laden der Daten kann mehrere Minuten dauern!)");
        progressDialog.activateProgressBar(task);
        task.setOnSucceeded(event -> {
            progressDialog.getDialogStage().close();
          
            int returnValue = (Integer)event.getSource().getValue();
          
            if(returnValue == 0) {
                // mach was wenn der Task 0 zurück gibt
            }
            else if(returnValue == -1) {
                // mach was wenn der Task -1 zurück gibt
            }
            else if(returnValue == 1) {
                // mach was wenn der Task 1 zurück gibt
            }  
            else if(returnValue == 2) {
                // mach was wenn der Task 2 zurück gibt
            }
        });
      
      
        task.setOnCancelled(event -> {
            progressDialog.getDialogStage().close();
        });
      
        task.setOnFailed(event -> {
            progressDialog.getDialogStage().close();
        });
      
        progressDialog.getDialogStage().show();

        Thread thread = new Thread(task);
        thread.start();
    }
 
Zuletzt bearbeitet:
K

knilch

Hi,
Hier noch eine Möglichkeit, wie die import-Funktionalität dann als Task umgesetzt werden kann:
Java:
public class ExcelImportTask extends Task<Integer> {
    private File excelFile;
    private int startingRow = 1;
    private int max;

    public ExcelImportTask(File excelFile) {
        this.excelFile = excelFile;
    }

    @Override
    protected Integer call() throws Exception {
        //...
        Workbook workbook;
        if(file.getName().endsWith(".xlsx")) {
            workbook = new XSSFWorkbook(file);
        } else if(file.getName().endsWith(".xls")) {
            workbook = new HSSFWorkbook(new FileInputStream(file));
        } else {
            Main.showAlert(Alert.AlertType.ERROR, "Wrong file format", "Not a valid" +
                    " file format", "The file you have chosen has an invalid file format. Please make sure" +
                    " that the file format is .xlsx or .xls.");
            return 0;
        }
        // max ist die letzte row-nummer
    
        Sheet sheet = workbook.getSheetAt(0);
        for(int rowCounter = startingRow; rowCounter <= max; rowCounter++) {
            //Progress indication

            updateProgress(rowCounter, max);
            updateMessage(rowCounter + " von " + max + " gemacht" );
            //Excel data processing
            Row row = sheet.getRow((int)rowCounter);
            LocalDate localDate = dateToLocalDate(row.getCell(dateColumn).getDateCellValue());
            String category = row.getCell(categoryColumn).getStringCellValue();
            String description = row.getCell(descriptionColumn).getStringCellValue();
            double income = row.getCell(incomeColumn).getNumericCellValue();
            income = Math.round(income * 100);
            income = income / 100;
            double expense = row.getCell(expenseColumn).getNumericCellValue();
            expense = Math.round(expense * 100);
            expense = expense / 100;
            dbManager.addContentData(new ContentData(localDate, category, description, income, expense));
        }
        //...
        return 0;
    }
}
Dann: muss in der Methode die den import dann macht, folgendes umgestzt werden.
statt:
Java:
        Task<Integer> task = new Task<Integer>() {
            @Override
            public Integer call() throws InterruptedException {
                // hier wieder der länger dauernde  conde gestartet.
               // das wäre dann auch der Ort, in dem deine Arbeit für den Import der Exceldaten gestartet werden sollte.
                return modelController.checkLoadedDirectory(selectedDirectory);
            }
        };
kommt dann:
Java:
Task<Integer> task = new ExcelImportTask();
// der rest bleibt dann gleich wie oben beschrieben..
 
Zuletzt bearbeitet:
K

Kenta1561

@knilch
Erstmal vielen Dank für die Antwort! Ich habe direkt versucht, alles umzusetzen und die beiden Antworten sozusagen zu kombinieren. Das Problem jedoch ist nun, dass ich in der ExcelImportTask-Klasse keine JavaFX-Methoden mehr aufrufen kann, denn folgendes wird angezeigt wenn ich versuche Methoden wie updateProgress() in der ProgressDialog-Klasse oder Main.showAlert(), welche eine Vereinfachung für ein Alert von JavaFX ist, aufzurufen: java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4

Ich kann das ganze auch natürlich ohne Alerts und ProgressBar Updates machen (so wie in deiner ersten Antwort, dass die ProgressBar INDEFINITE (ich glaube so war das gewesen) bleibt), aber ich fand deine zweite Umsetzung MIT dem ProgressBar Update besser und würde gerne wissen, was ich evtl. falsch gemacht habe.

LG
Kenta1561
 
K

knilch

Hi,
Gerne.
Ich hab mal ein kleines Beispiel gemacht, wie das funktioniert.
In diesem Beispiel wird der Alert nicht mehr im ExcelImportTask ausgelöst (falls keine xls oder xlsx-Datei selektiert wurde). Die Prüfung, ob eine Excel-Datei selektiert wurde, gehört in den Ort, wo der Benutzer die Datei selektiert hat. Wenn dort die Prüfung schon sagt, nene, das is keine Exceldatei, dann muss der Excel-Task gar nicht erst gestartet werden...
Hier mal ein Beispiel:
Main.java
Java:
import java.io.File;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;


public class Main extends Application {
    private Stage stage;
    @Override
    public void start(Stage stage) {
        this.stage = stage;
        initView();
    }
   
    public static void main(String[] args) {
        launch(args);
    }
   
    private void initView() {
        try {
            stage.setTitle("Progressbar Example");
            Button loadBtn = new Button();
            loadBtn.setText("Excel-Daten importieren");
            loadBtn.setOnAction((event) -> {
                openFileDialog();
            });     
           
            Button closeBtn = new Button();
            closeBtn.setText("Schliessen");
            closeBtn.setOnAction((event) -> {
                stage.close();
            });
           
            VBox vbox = new VBox();
            vbox.setSpacing(10);
            vbox.getChildren().add(loadBtn);
            vbox.getChildren().add(closeBtn);
           
            stage.setScene(new Scene(vbox, 300, 250));
            stage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
   
    private void openFileDialog() {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Excel-Datei auswählen...");
        File file = fileChooser.showOpenDialog(stage);

        // Set extension filter
        fileChooser.getExtensionFilters().addAll( new ExtensionFilter("Excel Files", "*.xls", "*.xlsx"));
       
        if (file != null){
            loadExceldata(file);
        }
        else {
            Alert alert = new Alert(AlertType.ERROR);
            alert.setTitle("Error");
            alert.setHeaderText("Error during import of Excel-Data");
            String errorMessage = "No Excel-file has been selected!";
            alert.setContentText(errorMessage);
            alert.showAndWait();
        }
    }
   
    private void loadExceldata(File file) {
        ProgressDialog progressDialog = new ProgressDialog("Exceldaten laden ...");
        Task<Integer> task = new ExcelImportTask(file);
        progressDialog.updateLabel1Text("Bitte warten, die Daten werden geladen...");
        progressDialog.updateLabel2Text("Das Laden der Daten kann evtl. mehrere Minuten dauern!");
        progressDialog.activateProgressBar(task);
       
        task.setOnSucceeded(event -> {
            progressDialog.getDialogStage().close();
        
            int returnValue = (Integer)event.getSource().getValue();
        
            if(returnValue == 0) {
                Alert alert = new Alert(AlertType.INFORMATION);
                alert.setTitle("Information");
                alert.setHeaderText("Success");
                alert.setContentText("All data has been successfully imported!");
                alert.showAndWait();
            }
        });
       
        task.messageProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                System.out.println("--> " + newValue);   
            }
        });

        task.setOnCancelled(event -> {
            progressDialog.getDialogStage().close();
        });
    
        task.setOnFailed(event -> {
            progressDialog.getDialogStage().close();
        });
    
        progressDialog.getDialogStage().show();

        Thread thread = new Thread(task);
        thread.start();
    }
}
und ExcelImportTask.java
Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javafx.concurrent.Task;

public class ExcelImportTask extends Task<Integer> {
    private File excelFile;

    public ExcelImportTask(File excelFile) {
        this.excelFile = excelFile;
    }

    @Override
    protected Integer call() throws Exception {
        InputStream inputStream = new FileInputStream(excelFile.getAbsolutePath());

        Workbook workbook;
        if(excelFile.getName().endsWith(".xls"))
            workbook = new HSSFWorkbook(inputStream);
        else
            workbook = new XSSFWorkbook(inputStream);
 
        Sheet sheet = workbook.getSheetAt(0);
        Row row;
        // Die letzte row-nummer ermitteln:
        int lastRow = sheet.getPhysicalNumberOfRows();
        int firstRow = 1;
        String dateString;       
        String data;
        int dateColumn = 0;
        int dataColumn = 1;
        for(int i = firstRow ; i < lastRow; i++) {
            //Excel data processing
            row = sheet.getRow(i);
            dateString = row.getCell(dateColumn).toString();
            data = row.getCell(dataColumn).toString();
            Thread.sleep(100);
            // progress indication
            updateProgress(i, lastRow);
            updateMessage(dateString + " " + data);
        }
        inputStream.close();
        if(workbook != null) {
            workbook.close();
        }
        return 0;
    }
}
Diese beiden Klassen kannst du so erstellen und dann ausführen.
Die Zeilen bei denen ich die Daten aus den Zeilen der Excel-Datei entnehme, musst du dann für dich entsprechend anpassen.
Viele Grüsse und viel Spass beim Probieren.
Knilch
 
K

Kenta1561

@knilch
Danke für die Antwort, aber updateProgress() geht auch nicht, weil das ja auch was mit dem Interface zu tun hat :(

LG
Kenta1561
 
K

knilch

...weil das ja auch was mit dem Interface zu tun hat
Ich verstehe nicht, was du damit meinst.
Versuch mal, das Beispiel, dass ich oben gepostet habe, als app in deiner IDE zu erstellen. Zu den beiden Klassen: Main.java und ExcelImportTask.java brauchst du noch ProgressDialog.java, welche ich früher mal gepostet habe.
Dann erstellst du einfach ein Excel-dokument, wechle in der Row 0 einen Header hat und dann ab Row 1 in Col 0 ein Datum, und Col 1 eine zahl.
in etwa so:
Code:
Date    Data
01.01.2017    1
02.01.2017    2
03.01.2017    3
04.01.2017    4
05.01.2017    5
06.01.2017    6
07.01.2017    7
08.01.2017    8
09.01.2017    9
10.01.2017    10
...
Dann starte das Programm und lade die Excel-Datei, welche du soeben gemacht hast.
Damit müsste es eigentlich funkionieren, ausser du hast nicht alle Libraries geladen. Aber dann solltest du in der IDE bereits einen Fehler feststellen können.
 
K

kahem

Ich verstehe nicht, was du damit meinst.
Versuch mal, das Beispiel, dass ich oben gepostet habe, als app in deiner IDE zu erstellen. Zu den beiden Klassen: Main.java und ExcelImportTask.java brauchst du noch ProgressDialog.java, welche ich früher mal gepostet habe.
Dann erstellst du einfach ein Excel-dokument, wechle in der Row 0 einen Header hat und dann ab Row 1 in Col 0 ein Datum, und Col 1 eine zahl.
in etwa so:
Code:
Date    Data
01.01.2017    1
02.01.2017    2
03.01.2017    3
04.01.2017    4
05.01.2017    5
06.01.2017    6
07.01.2017    7
08.01.2017    8
09.01.2017    9
10.01.2017    10
...
Dann starte das Programm und lade die Excel-Datei, welche du soeben gemacht hast.
Damit müsste es eigentlich funkionieren, ausser du hast nicht alle Libraries geladen. Aber dann solltest du in der IDE bereits einen Fehler feststellen können.
@knilch: Hallo, ich habe mal nach dem Post mit der "ProgressDialog.java" gesucht, kann den aber hier im Forum nicht finden. Wollte das Beispiel mal testen. Gibt es das noch? Suche gerade auch nach eine Möglichkeit für mein Progrämmchen.
Vielen Dank schon mal im Voraus.
Gruß Kahem
 
Zuletzt bearbeitet:
T

temi

@knilch: Hallo, ich habe mal nach dem Post mit der "ProgressDialog.java" gesucht, kann den aber hier im Forum nicht finden. Wollte das Beispiel mal testen. Gibt es das noch? Suche gerade auch nach eine Möglichkeit für mein Progrämmchen.
Vielen Dank schon mal im Voraus.
Gruß Kahem
Vielleicht solltest du einfach deine Fragen in einem eigenen Thema stellen. Dieses Thema ist mehrere Jahre alt und der Angesprochene ist nicht mehr in diesem Forum...
 
mrBrown

mrBrown

Hallo, ich habe mal nach dem Post mit der "ProgressDialog.java" gesucht, kann den aber hier im Forum nicht finden. Wollte das Beispiel mal testen. Gibt es das noch?
Etwas weiter oben hier im Thread:

Hier mal eine Variante, wie du es vielleicht umsetzten könntest:
Java:
import javafx.concurrent.Task;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.WindowEvent;

public class ProgressDialog {
    private final Stage dialogStage;
    private final ProgressBar progressBar = new ProgressBar();
    private final Label label1 = new Label();
    private final Label label2 = new Label();

    public ProgressDialog(String title) {
        dialogStage = new Stage();
        dialogStage.initStyle(StageStyle.UTILITY);
        dialogStage.setResizable(false);
        dialogStage.initModality(Modality.APPLICATION_MODAL);
        dialogStage.setTitle(title);
        dialogStage.setWidth(340);
        dialogStage.setHeight(140);
    
   
        // disable the close button on dialog
        dialogStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
            @Override
            public void handle(WindowEvent event) {
                 event.consume();            
            }
        });
    
        progressBar.setProgress(-1F);
        progressBar.setPrefWidth(320);
        progressBar.setPrefHeight(35);

        final VBox vBox = new VBox();
        VBox.setMargin(label1, new Insets(10, 10, 10, 10));
        vBox.setAlignment(Pos.CENTER);
        VBox.setMargin(label2, new Insets(10, 10, 10, 10));
        vBox.setAlignment(Pos.CENTER);
        VBox.setMargin(progressBar, new Insets(10, 10, 10, 10));
        vBox.getChildren().addAll(label1, label2, progressBar);

        Scene scene = new Scene(vBox);
        dialogStage.setScene(scene);
    }

    public void activateProgressBar(final Task<?> task)  {
        progressBar.progressProperty().bind(task.progressProperty());
        dialogStage.show();
    }

    public void updateLabel1Text(String text) {
        label1.setText(text);
    }

    public void updateLabel2Text(String text) {
        label2.setText(text);
    }

    public Stage getDialogStage() {
        return dialogStage;
    }
}
und hier noch ein Beispiel wie dieser Dialog dann aufgerufen wird:
In der Methode loadDirectory() wird dann die Arbeit gestartet, die länger dauern kann und gleichzeitig die Progressbar updated.
Java:
    /**
     * Method to start long working
     */
    private void loadDirectory() {
        ProgressDialog progressDialog = new ProgressDialog("Datenstruktur laden ...");
        Task<Integer> task = new Task<Integer>() {
            @Override
            public Integer call() throws InterruptedException {
                // hier wieder der länger dauernde  conde gestartet.
               // das wäre dann auch der Ort, in dem deine Arbeit für den Import der Exceldaten gestartet werden sollte.
                return modelController.checkLoadedDirectory(selectedDirectory);
            }
        };
        progressDialog.updateLabel1Text("Bitte warten, die Daten werden geladen...");
        progressDialog.updateLabel2Text("(Das Laden der Daten kann mehrere Minuten dauern!)");
        progressDialog.activateProgressBar(task);
        task.setOnSucceeded(event -> {
            progressDialog.getDialogStage().close();
         
            int returnValue = (Integer)event.getSource().getValue();
         
            if(returnValue == 0) {
                // mach was wenn der Task 0 zurück gibt
            }
            else if(returnValue == -1) {
                // mach was wenn der Task -1 zurück gibt
            }
            else if(returnValue == 1) {
                // mach was wenn der Task 1 zurück gibt
            } 
            else if(returnValue == 2) {
                // mach was wenn der Task 2 zurück gibt
            }
        });
     
     
        task.setOnCancelled(event -> {
            progressDialog.getDialogStage().close();
        });
     
        task.setOnFailed(event -> {
            progressDialog.getDialogStage().close();
        });
     
        progressDialog.getDialogStage().show();

        Thread thread = new Thread(task);
        thread.start();
    }
 
Thema: 

Stage wird nicht angezeigt

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben