Alert não inicia

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: