Hallo zusammen,
ich habe schon wieder eine Frage/Problematik wo ich nicht so recht weiter komme und hoffe Ihr könnt mir wieder mal helfen.
Hier kurz die Beschreibung meiner Thematik die ich lösen möchte:
Ich habe einen Service Thread in dem ich verschiedene Tasks durchführe, wie z.B:
Den Confirmation Dialog habe folgendermassen codiert:
Im Service Thread sieht der Abschnitt dann folgendermaßen aus:
Wenn ich das programm starte und es den eingegeben User nicht gibt, dann endet das Programm nicht aber der Confirmation Dialog wird nicht angezeigt.
Wenn ich das mit einem
mache, dann wird der Dialog angezeigt, ABER das programm, sprich der Service Task läuft natürlich weiter, was ja auch nicht so gewollt ist.
Frage:
Wie kann ich in dem Service Task den Confirmation Dialog anzeigen so dass der Servcie Task an der Stelle auf die User Bestätigung wartet und ich dann auch das Ergebniss (Create User oder Cancel) im weiteren Verlauf des Servcie Task weiter verabeiten kann --> User in der DB erstellen order im Programm ohne Erstellung eines User weiter machen?
Gruß
Ralf
ich habe schon wieder eine Frage/Problematik wo ich nicht so recht weiter komme und hoffe Ihr könnt mir wieder mal helfen.
Hier kurz die Beschreibung meiner Thematik die ich lösen möchte:
Ich habe einen Service Thread in dem ich verschiedene Tasks durchführe, wie z.B:
- Task 1: Check if ojdbc driver is available.
- Task 2: Try database connection. Printout Java and JDBC Version
- Task 3: Check the database version
Den Confirmation Dialog habe folgendermassen codiert:
Java:
private void showConfirmationDialogUserCreation() {
Alert confirmUserCreation = new Alert(AlertType.CONFIRMATION);
confirmUserCreation.setTitle("Create User");
confirmUserCreation
.setHeaderText("User doesn't exist.\nDo you want to create the user with the given credentials?");
// confirmUserCreation.setContentText("Create User hr");
// Create new Buttons
ButtonType createUser = new ButtonType("Create User");
ButtonType cancel = new ButtonType("Cancel");
// Remove default ButtonTypes
confirmUserCreation.getButtonTypes().clear();
// Set new defined Buttons
confirmUserCreation.getButtonTypes().addAll(createUser, cancel);
Optional<ButtonType> option = confirmUserCreation.showAndWait();
if (option.get() == null) {
LOGGER.severe("Entered User Confirmation Dialog: No selection!");
} else if (option.get() == createUser) {
System.out.println("User hr created");
} else if (option.get() == cancel) {
System.out.println("User declined to create User hr");
} else {
LOGGER.severe("Entered User Confirmation Dialog case where we shouldn't be ...");
}
}
Java:
// Worker Thread called when DB Connect Button tapped ...
@SuppressWarnings("rawtypes")
Service serviceWorkerConnectDB = new Service() {
String dbBanner;
@Override
protected Task createTask() {
return new Task() {
@Override
protected Void call() throws Exception {
// Start enetering execution code here ...
...
...
// Task 4: If Username entered try connection as normal user ...
if (!dbUserName.getText().isEmpty()) {
updateMessage("Task4: Check if User " + dbUserName.getText() + " exists.");
LOGGER.info("Task4: Check if User " + dbUserName.getText() + " exists.");
String queryCheckIfUserExist = "select USERNAME from dba_users where USERNAME='" + dbUserName.getText().toUpperCase() + "'";
Statement stmtCheckIfUserExist = connSys.createStatement();
ResultSet rsetCheckUser = stmtCheckIfUserExist.executeQuery(queryCheckIfUserExist);
if (rsetCheckUser.next()) {
String user = rsetCheckUser.getString("USERNAME");
if (user.equalsIgnoreCase(dbUserName.getText())) {
updateMessage("Task4: Check if User " + dbUserName.getText() + " exists: Success!");
LOGGER.info("Task4: Check if User " + dbUserName.getText() + " exists: Success!");
}
} else {
updateMessage("Task4: Check if User " + dbUserName.getText() + " exists: User does not exist.");
LOGGER.info("Task4: Check if User " + dbUserName.getText() + " exists: User does not exist!");
showConfirmationDialogUserCreation();
}
}
// End handling ...
updateProgress(1.0, 1.0);
connectDB.setDisable(false);
dbPatchInfo.setDisable(false);
connSys.close();
// End entering execution code here ...
return null;
}
Wenn ich das programm starte und es den eingegeben User nicht gibt, dann endet das Programm nicht aber der Confirmation Dialog wird nicht angezeigt.
Wenn ich das mit einem
Java:
Platform.runLater(() -> {
showConfirmationDialogUserCreation();
});
Frage:
Wie kann ich in dem Service Task den Confirmation Dialog anzeigen so dass der Servcie Task an der Stelle auf die User Bestätigung wartet und ich dann auch das Ergebniss (Create User oder Cancel) im weiteren Verlauf des Servcie Task weiter verabeiten kann --> User in der DB erstellen order im Programm ohne Erstellung eines User weiter machen?
Gruß
Ralf