# Fehler bei Alert



## Ingerten (13. Nov 2015)

Hallo Männers,

ich versuche mich grade in JavaFX und habe da ein kleines Problem, ich bekomme immer einen Fehler bei diesem Code.
Java-Version: JDK 8u45 64Bit


```
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;

public class Test {

    public Test() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        Alert alert = new Alert(AlertType.INFORMATION);
        alert.setTitle("Information Dialog");
        alert.setHeaderText(null);
        alert.setContentText("I must inform you that …");
        alert.showAndWait();
    }

}
```

und der Fehler, den ich bekomme ist:


```
Exception in thread "main" java.lang.ExceptionInInitializerError
    at javafx.scene.control.DialogPane.createContentLabel(DialogPane.java:166)
    at javafx.scene.control.DialogPane.<init>(DialogPane.java:217)
    at javafx.scene.control.Dialog.<init>(Dialog.java:478)
    at javafx.scene.control.Alert.<init>(Alert.java:245)
    at javafx.scene.control.Alert.<init>(Alert.java:223)
    at main.Test.main(Test.java:13)
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
```

Ich habe aber keinen Ansatz um das Problem zu lösen.
Hilfe!!!


----------



## Flown (13. Nov 2015)

Du kannst keine JavaFx Sachen laufen lassen, ohne diese richtig zu initialisieren. Wenn du den Fehler gegooglet hattest dann wärst du HIER gelandet.


----------



## knilch (13. Nov 2015)

Hi,
JavaFx apps können so nicht gestartet werden. Wenn du deinen Dialog anzeigen möchtest, geht das nur so:

```
import javafx.application.Application;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.stage.Stage;

public class Test extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
        Alert alert = new Alert(AlertType.INFORMATION);
        alert.setTitle("Information Dialog");
        alert.setHeaderText(null);
        alert.setContentText("I must inform you that …");
        alert.showAndWait();      
    }
}
```
Dabei muss deine Klasse Test die Klasse Application erweitern. In dieser Klasse musst dann in der methode start(Stage primaryStage) {...} der Code für das starten vom JavaFx-Gui eingefügt werden.
Das Gui wird dann mit launch(args) in der main-Methode gestartet.


----------



## Ingerten (13. Nov 2015)

OK, ich verstehe.

Ich bin noch Anfänger in Java, bitte entschuldigt, ich verstehe noch nicht alle Zusammenhänge.

Aber wie kann ich das in dem Fall am besten machen?
Ich habe eine Datenbank und will eine Verbindung herstellen, wenn es nicht geklappt hat, dann "alert".

Frage:
Ist es jetzt sinnvoll eine Klasse nur für "Alert" zu erstellen oder gibt es da noch eine andere Lösung, 
damit ich es in der Klasse "Eintrag" ausführen kann?


```
import java.sql.SQLException;
import java.sql.Statement;

import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;

public class Eintrag{
   
    Statement s;

    public Eintrag() {
       
        try {
            DBConnect connect = new DBConnect();
            if (!connect.connect("db.mdb", "", "")) {
                s= connect.getS();
                s.executeUpdate("insert into Tabelle1([Feld1], [Feld2])values('der Test', 'Test 2')");

                s.close();
            }
            else {
                Alert alert = new Alert(AlertType.INFORMATION);
                alert.setTitle("Information Dialog");
                alert.setHeaderText(null);
                alert.setContentText("I must inform you that …");
                alert.showAndWait();    
            }
        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
```


----------



## Joose (13. Nov 2015)

Ingerten hat gesagt.:


> Ich bin noch Anfänger in Java, bitte entschuldigt, ich verstehe noch nicht alle Zusammenhänge.



Daher sollte man nicht gleich mit den komplizierten UI Sachen und OOP anfangen 
Sondern erstmal die Grundlagen lernen und festigen, danach sollte man sich OOP aneignen. 
Danach kann man ohne weiteres mit UI usw. anfangen und wird einfach schneller ans Ziele kommen (und dabei weniger Probleme haben) als wenn man direkt damit anfängt.



Ingerten hat gesagt.:


> Aber wie kann ich das in dem Fall am besten machen?
> Ich habe eine Datenbank und will eine Verbindung herstellen, wenn es nicht geklappt hat, dann "alert".
> 
> Frage:
> ...



Im Post direkt über dir (von @knilch) wird dir doch genau erklärt was benötigt wird um ein einfaches Alert Fenster anzuzeigen.
Deine Klasse muss die Application Klasse erweitern sowie die start Methode überschreiben!


----------



## Ingerten (13. Nov 2015)

Ich weiss, das war ne dumme Frage.


----------



## klauskarambulut (13. Nov 2015)

Absoluter Quatsch. Funktioniert zwar auch, aber wer will sich das schon antun?
Einfach in der main-Methode, ganz am Anfang, ein JFXPanel initialisieren, dass lädt dann alles was man braucht für JavaFX

```
public static void main(String[] args) {
  new JFXPanel();
  //... weiter mit dem normalen Code.
}
```


----------

