JavaFX Stage wird nicht angezeigt

K

Kenta1561

Bekanntes Mitglied
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

Bekanntes Mitglied
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

Bekanntes Mitglied
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

Bekanntes Mitglied
@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

Bekanntes Mitglied
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

Bekanntes Mitglied
@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

Bekanntes Mitglied
...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

Neues Mitglied
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:
temi

temi

Top Contributor
@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

Super-Moderator
Mitarbeiter
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();
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OSchriever Auf Stage von FXML-Controller zugreifen AWT, Swing, JavaFX & SWT 12
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
E Aktuelle Uhrzeit auf jeder Stage anzeigen lassen (JavaFX) AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Wie Text Label in neuem Window von Main Stage setzen? AWT, Swing, JavaFX & SWT 6
R Größe von Scene und stage an grid anpassen AWT, Swing, JavaFX & SWT 4
N java.awt.Window nach javafx.stage.Window AWT, Swing, JavaFX & SWT 1
S JavaFX GridPane Zellen Seitenverhätnis passend ändern mit der Stage AWT, Swing, JavaFX & SWT 0
M Jumping Stage Flash AWT, Swing, JavaFX & SWT 8
K Globaler Stage- und Taskmanager AWT, Swing, JavaFX & SWT 3
MaxG. JavaFX JavaFX Stage nicht minimierbar machen AWT, Swing, JavaFX & SWT 2
F JavaFX Mit einer Methode auf Stage zugreifen. AWT, Swing, JavaFX & SWT 8
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
Tort-E JavaFX Stage reload, refresh ... AWT, Swing, JavaFX & SWT 3
Krappe87 JavaFX minWidth/minHeigth der Stage (des Fensters) festlegen AWT, Swing, JavaFX & SWT 4
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
Z JAVAFX Stage über Controller weitergeben um css-file zu laden AWT, Swing, JavaFX & SWT 4
N JavaFX Stage aktualisieren AWT, Swing, JavaFX & SWT 5
M JavaFX Stage in einer FXML-Controllerklasse ermitteln? AWT, Swing, JavaFX & SWT 5
JAVAnnik JavaFX Maximize undecorated Stage (JavaFX 8) AWT, Swing, JavaFX & SWT 3
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
Tort-E JavaFX Mehere "Widgets" in einer Stage AWT, Swing, JavaFX & SWT 1
R JavaFX Stage.close() funktioniert nicht im jar-File AWT, Swing, JavaFX & SWT 2
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
J setOnCloseRequest wird nicht ausgelöst AWT, Swing, JavaFX & SWT 3
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 5
B JavaFX Bei Scenen-Wechsel im primaryStage wird aktuelle Fenstergröße nicht mit übernommen AWT, Swing, JavaFX & SWT 16
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
kodela BufferStrategy wird nicht gefunden AWT, Swing, JavaFX & SWT 5
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
S ImageView wird dem Gridpane nicht zugefügt AWT, Swing, JavaFX & SWT 1
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
cool_brivk24 AWT BufferedImage wird nicht geladen AWT, Swing, JavaFX & SWT 17
S JavaFX Wird es überhaupt genutzt? AWT, Swing, JavaFX & SWT 3
FRI3ND GUI wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
J Aus welchen Grund wird der Button nicht angezeigt im GridPane? AWT, Swing, JavaFX & SWT 1
J MouseListener wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 4
E Swing Liste in Scrollpane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Controller wird zu groß, was tun ? AWT, Swing, JavaFX & SWT 5
UnknownInnocent Wieso wird nur ein Teil meiner Buttons angezeigt? AWT, Swing, JavaFX & SWT 1
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Aktion ausführen wenn ein JRadiobutton deselektiert wird. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann TableView wird nicht gefüllt AWT, Swing, JavaFX & SWT 14
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
zhermann JavaFX Main App wird nicht geöffnet AWT, Swing, JavaFX & SWT 6
N JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 15
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
M Swing Inhalt meines JTables wird falsch dargestellt AWT, Swing, JavaFX & SWT 8
T Default Table wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
X JavaFX AreaChart area höhe wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 2
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
S Swing Konstruktor wird nicht rechtzeitig fertig? AWT, Swing, JavaFX & SWT 4
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Linie wird nach Mausklick nicht am richtigen Ort gezeichnet AWT, Swing, JavaFX & SWT 11
C Liste - ListView wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
N JavaFX TextArea Updaten bevor Prozess gestartet wird AWT, Swing, JavaFX & SWT 7
B HBox wird nicht im Bottom angezeigt AWT, Swing, JavaFX & SWT 8
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
J GUI wird nicht angezeigt AWT, Swing, JavaFX & SWT 17
L JavaFX Node wird nicht korrekt angezeigt AWT, Swing, JavaFX & SWT 7
M Hintergrundbild wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
M JavaFX Scene wird nicht angezeigt AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben