SystemTray com JavaFX

3 respostas
javafxjava
S

Eu crio um ícone na bandeja do windows dessa forma

@Override
    public void start(Stage stage) {
        loader = new Loader("/fxml/Menu.fxml");
        //cria menu da bandeja
        PopupMenu popup = new PopupMenu();
        //cria opção abrir
        MenuItem mostrarItem = new MenuItem("Abrir");
        mostrarItem.addActionListener(e -> {
            Platform.runLater(() -> {
                Stage s = loader.newStage("DerbyServer");
                s.showAndWait();
            });
        });
        popup.add(mostrarItem);
        //cria opção sair
        MenuItem sairItem = new MenuItem("Sair");
        sairItem.addActionListener(e -> {
            System.exit(0);
        });
        popup.add(sairItem);
        bandeja = new Bandeja();
        bandeja.start("imagens/icone_bandeja.png", "DerbyServer", popup);
    }

Esse código cria um popup com duas opções (abrir e sair), ao executar o programa ele funciona normalmente, quando eu clico em abrir ele realmente abre meu Stage do JavaFx, mas quando eu fecho e tento abrir de novo ele não abre mais a GUI, mas o programa continua executando normalmente… Como acerto isso?

3 Respostas

L

Em seu método public void start(final Stage stage) configure

Platform.setImplicitExit(false);

Veja: https://gist.github.com/jewelsea/e231e89e8d36ef4e5d8a

D

SystemTray no JavaFX é um gambiarra da porra.

S
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: AnchorPane[id=AnchorPane, styleClass=root]is already set as root of another scene

Acredito que como agora o programa não fecha totalmente (eu acho) ele não deixa eu atribuir o node a outro stage, se eu criar outro node isso faz com que meu programa fique inchado? abrindo telas sem fechar?

Criado 16 de agosto de 2017
Ultima resposta 18 de ago. de 2017
Respostas 3
Participantes 3