Olá. Eu tentei criar um Alert do JavaFX com a seguinte estrutura:
try {
s = new ServerSocket(9581);
} catch (Exception e2) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Erro!");
alert.setHeaderText(null);
alert.setContentText("O programa já está em execução");
alert.showAndWait();
System.exit(1);
e2.printStackTrace();
}
Eu já trabalhei com Alert outras vezes sem problema algum, mas agora eu estou recebendo uma exceção que eu não entendo:
Exception in thread "main" java.lang.ExceptionInInitializerError
at javafx.scene.control.DialogPane.createContentLabel(DialogPane.java:167)
at javafx.scene.control.DialogPane.<init>(DialogPane.java:218)
at javafx.scene.control.Dialog.<init>(Dialog.java:506)
at javafx.scene.control.Alert.<init>(Alert.java:245)
at javafx.scene.control.Alert.<init>(Alert.java:223)
at com.tkfentreteniment.meusdados.start.Start.main(Start.java:23)
Caused by: java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:273)
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:268)
at com.sun.javafx.application.PlatformImpl.setPlatformUserAgentStylesheet(PlatformImpl.java:550)
at com.sun.javafx.application.PlatformImpl.setDefaultPlatformUserAgentStylesheet(PlatformImpl.java:512)
at javafx.scene.control.Control.<clinit>(Control.java:87)
... 6 more
Obs: Start.java:23 = Alert alert = new Alert(AlertType.ERROR);
Alguém aqui sabe me dizer o que eu fiz de errado?
Nessa parte:
Alert alert = new Alert(AlertType.ERROR);
Substitua por:
Alert alert = new Alert(Alert.AlertType.ERROR);
Olá. Eu substituí e apareceu a mesma exceção.
Olá você está inicializando a aplicação por uma classe que estenda Application? O javaFx só carrega seu ambiente (toolkit) por uma classe desse tipo.
O que provavelmente você está fazendo:
public class MainClass {
public static void main(String[] args) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Erro!");
alert.setHeaderText(null);
alert.setContentText("O programa já está em execução");
alert.showAndWait();
}
}
O correto:
public class MainClass extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Erro!");
alert.setHeaderText(null);
alert.setContentText("O programa já está em execução");
alert.showAndWait();
}
}
1 curtida
Opa. Eu já tive outros problemas com esse toolkit, não sabia que podia ser ele de novo. Sim, eu estou fazendo isso a partir de uma classe comum, porque essa classe era somente para fazer a inicialização do programa e das informações básicas, não sabia que também era necessário estender de Application também. Eu fiz essa Alert somente para impedir que várias instâncias da aplicação entrem em execução. A Alert agora está funcionando, porém, se lembra daquele tópico meu sobre chamar várias vezes uma Application? Quando tu disse que ia colocar no Github eu coloquei try e catch em todos os launch somente para evitar que a aplicação pare ao receber a exceção e continuei o desenvolvimento, porém isso ficou ali. Agora, por algum motivo que eu desconheço, ao inicializar Start, eu recebo uma mensagem do catch e nada inicia.
Acabei de publicar a biblioteca no Git: