JavaFX Stage wird nicht angezeigt

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
 

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:

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:

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
 

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
 

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.
 

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

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

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
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
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
Neumi5694 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
MiMa 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
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
G JavaFX LineChart Datenpunkte Markierung wird abgeschnitten AWT, Swing, JavaFX & SWT 1
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
N €-Zeichen wird nicht akzeptiert AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
U Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)? AWT, Swing, JavaFX & SWT 31
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
ProggersWorld JavaFX TextArea BackgroundImage wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
izoards Outlook Mail erstellen - Signatur wird nicht angezeigt. AWT, Swing, JavaFX & SWT 3
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
S Next_Button wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 6
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
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 13
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
CptK 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
Naxon89 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

Ähnliche Java Themen

Neue Themen


Oben