unten, um den Code-Schnipsel Siehe:TextInputDialog nur zum ersten Mal gezeigt
public class Application extends javafx.application.Application implements ActionListener {
private java.awt.SystemTray tray;
private java.awt.TrayIcon trayIcon;
private java.awt.PopupMenu popupMenu = new PopupMenu();
private java.awt.MenuItem menuItem = new MenuItem("My Item");
@Override
public void start(Stage primaryStage) throws Exception {
if (!SystemTray.isSupported())
return;
menuItem.addActionListener(this);
popupMenu.add(menuItem);
trayIcon = new TrayIcon(image, "Title", popupMenu);
tray = SystemTray.getSystemTray();
tray.add(trayIcon);
}
@Override
public void actionPerformed(ActionEvent e){
Platform.runLater(() -> {
Optional<String> result = new TextInputDialog().showAndWait();
if(result.isPresent() && !result.get().isEmpty()){
...
}
})
}
}
Was ist der Dialog nur einmal passiert ist, zeigen wird. Die zweite oder mehrere Male actionPerformed()
wird ausgelöst, es wird nicht angezeigt und keine Ausnahme ausgelöst.
Ich habe versucht, mit Task
, setOnSucceeded()
an diesen Task
, und starten Sie ein Thread
auf der Grundlage dieser Task
. Schlimmer noch, der Dialog wird überhaupt nicht angezeigt und auch hier wird kein Fehler erzeugt.
Können Sie Ihre Importe zeigen? Das macht keinen Sinn: Sie befinden sich in einer JavaFX-Anwendung, registrieren aber einen 'ActionListener'? –
@James_D Sie haben Recht, sowohl 'MenuItem' als auch' ActionListener' stammen von java.awt. Ich weiß, dass es nicht so sein sollte, aber JavaFX implementiert noch kein plattformübergreifendes SystemTray wie AWT. –
Können Sie Ihr Beispiel zu einem [MCVE] machen? –