Splashscreen Start Anwendung

J90

Aktives Mitglied
Hallo,

habe ein Problem, welches ich schon seit längerem nicht richtig lösen kann in JavaFX
aufgrund von "Thread Nebenläufigkeit" und der Notwendigkeit des Aufrufs der Platform.runLater()-Funktion.

Ich habe verschiedene Anwendungen, welche ich über eine Stage mit den jeweils zugehörigen Buttons öffnen kann. Dies geschieht über

B.setOnAction((ActionEvent event) -> {
...
App = Klassenbezeichnung.class.newInstance();
App.init();
App.start(new Stage());
}

Das Starten dieser Anwendungen dauert einen Moment, weswegen ich in diesem Zeitraum einen Splash Screen einfügen möchte.
Der Splash Screen Funktioniert, wenn ich eine Application manuell über die jeweilige Klassenmethode der Application starte (mit dem Anlegen der SplashScreen-Stage in der Init()-Methode)).

Allerdings scheitern bisher alle Versuche (in welchen Formen auch immer), den SplashScreen als erstes über die setOnAction Methode des Buttons zu starten.
Der SplashScreen wird in diesem Fall immer erst geöffnet, wenn der Screen der Applikation
startet. Das Starten einer App (SplashScreen) davor führt zum gleichen Ergebniss, wie
der Versuch über eine separate Stage in der Klasse zu starten.
Das Einsetzen einer Ladestage in die Init() oder Start() Methode der App zeigt auch keine
Wirkung.

Die einzige Idee, die ich noch hätte, wäre das Starten über eine externe exe-Datei,
was aber keine Lösung sein kann.

Ideen-/Lösungsvorschläge wären sehr nützlich.

beste grüße
 

J90

Aktives Mitglied
Hallo,

das Beispiel verdeutlicht das Problem, wobei ich dazu sagen muss, dass ich das ausführen der Platform.runLater()-Methode in meinem richtigen Programm nicht machen muss (Wieso weiß nur der liebe Gott bei gleichem Aufbau..).

Wieso kann man eigentlich keine Dateien mit .java-Endung hochladen?
Java:
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author Sven Hohmann
 */
public class Beispiel extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void init() {
        new Splash();
    }

    @Override
    public void start(Stage Stage) throws Exception {
        Button Start = new Button("Start Anwendung");

        Start.setOnAction(new EventHandler() {
            @Override
            public void handle(Event event) {
                Application A;
                try {
                    Stage.hide();
                    A = App.class.newInstance();
                    A.init();
                    A.start(new Stage());
                } catch (Exception ex) {
                    System.out.println(ex.getMessage());
                }
            }
        });

        StackPane SP = new StackPane();
        SP.getChildren().add(Start);
        Stage.setScene(new Scene(SP, 200, 200));
        Stage.show();
    }

}

class App extends Application {

    @Override
    public void init() {
        new Splash();
        /*
        Wird erst ausgefuehrt, wenn auch Start Methode ausgefuehrt wird
         */
    }

    @Override
    public void start(Stage Stage) throws Exception {
        Stage.show();
    }

}

class Splash {

    Stage Splash;

    public Splash() {
        Platform.runLater(() -> {
            StackPane SP = new StackPane();
            Splash = new Stage();
            Splash.setScene(new Scene(SP, 500, 500));
            Splash.show();

        });
        try {
            Thread.sleep(2000);
        } catch (InterruptedException ex) {

        }
        Platform.runLater(() -> {
            Splash.hide();
        });
    }

}
 

Anhänge

  • Beispiel.txt
    2 KB · Aufrufe: 5
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
Java:
public class Beispiel extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void init() {
        new Splash();
    }

    @Override
    public void start(Stage Stage) throws Exception {
        Button Start = new Button("Start Anwendung");

        Start.setOnAction(new EventHandler() {
            @Override
            public void handle(Event event) {
                Application A;
                try {
                    Stage.hide();
                    A = App.class.newInstance();
                    A.init();
                    A.start(new Stage());
                } catch (Exception ex) {
                    System.out.println(ex.getMessage());
                }
            }
        });

        StackPane SP = new StackPane();
        SP.getChildren().add(Start);
        Stage.setScene(new Scene(SP, 200, 200));
        Stage.show();
    }

}

class App extends Application {

    @Override
    public void init() {
        new Splash();
        /*
        Wird erst ausgefuehrt, wenn auch Start Methode ausgefuehrt wird
         */
    }

    @Override
    public void start(Stage Stage) throws Exception {
        Stage.show();
    }

}

class Splash {

    Stage Splash;

    public Splash() {
        Platform.runLater(() -> {
            StackPane SP = new StackPane();
            Splash = new Stage();
            Splash.setScene(new Scene(SP, 500, 500));
            Splash.show();

        });
        try {
            Thread.sleep(2000);
        } catch (InterruptedException ex) {

        }
        Platform.runLater(() -> {
            Splash.hide();
        });
    }

}

Erstmal: Konventionen haben einen Grund, class Splash { Stage Splash; ist mehr als nur Grausam.
Genauso App.class.newInstance(), warum? :(


Zu dem Problem:
handle läuft im EventThread und blockiert diesen, bis es durchgelaufen ist.
App.init und damit auch new Splash laufen also auch im EventThread. (in der Ausführung handle)
Alles, was dann in Splash() im runLater läuft, hängst du hinten an und es wird erst nach dem durchlauf von handle ausgeführt.
Das schlafen blockiert den EventThread (immer noch bei in Ausführung handle).
Nach dem schlafen wird dann die andere App gestartet (in handle).
Danach ist handle fertig und die Teile aus runLater laufen, die andere App läuft aber schon.
 

J90

Aktives Mitglied
Die Thread.Sleep Aufruf habe ich nur angefügt, damit man das Problem eben optisch erkennt, d.h. soll die
Ladezeit des Programms simulieren.
Und was ist ist jetzt die Lösung?

Ein funktionierende Code im Anhang wäre nett, da ich in der Oberflächenprogrammierung etwas komprimiert bin.
 

J90

Aktives Mitglied
@VfL_Freak: Danke, werde die Code-Tags absofort nutzen.

@mrBrown: Wie gesagt, eine Veränderung des Codes in eine funktionierende Variante wäre nett, da schriftliche Analyse (wie schon bei mir oben) nicht
unbedingt zielführend ist.
Wie soll ich die Applikation sonst starten, wenn ich keine Instanz über
App.class.newInstance() anlege?

Habe so schon viel mit meinen Projekten zu tun, und das Problem hier ist
(wieder mal) sehr JavaFX speziell..
 
Zuletzt bearbeitet:

J90

Aktives Mitglied
Ich hoffe, dass ich im Laufe der Woche noch eine Code-Lösung präsentiert bekomme,
auch wenn ich mit meinem Poststart keine sehr romantische Atmospähre geschaffen habe..

@thet1983: Weil dies vermutlich nichts am Problem ändert?
Wie gesagt ein kurzer Code bzw. Veränderung meines Codes wäre nett, da dies
anscheinend leicht zu lösen ist
 

thet1983

Top Contributor
wenn deine app lange brauch zum laden dann verwende diesen preloader
es bringt nichts einfach eine Stage dazwischen zu werfen, absoluter unsinn
 

J90

Aktives Mitglied
Nur mit dem Problem, dass sich die Stage öffnet, aber der Inhalt erst mit der anderen Stage angezeigt wird. Einen Schritt weiter, Problem aber immer noch da
 
Zuletzt bearbeitet:

J90

Aktives Mitglied
Die Preloader Stage wird direkt nach dem Klick des Buttons geöffnet, aber deren Inhalt nicht. Dieser aktualisiert sich erst, wenn die MainStage des Programm startet, d.h. zu dem Zeitpunkt, wenn ich die PreLoader Stage wieder schließen möchte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K SplashScreen neben JFrame behalten AWT, Swing, JavaFX & SWT 10
M [Java/JavaFX] Splashscreen AWT, Swing, JavaFX & SWT 2
T SplashScreen im laufenden Programm AWT, Swing, JavaFX & SWT 2
A Splashscreen wird nicht angezeigt AWT, Swing, JavaFX & SWT 8
Z NullPointerException bei SplashScreen AWT, Swing, JavaFX & SWT 5
H JavaFX Prozess bei dem Start pausieren AWT, Swing, JavaFX & SWT 5
D Start JUNG application with an Empty plot or visualisation AWT, Swing, JavaFX & SWT 1
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
Z JavaFX Exception in Application start method AWT, Swing, JavaFX & SWT 2
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
L JavaFX JavaFXThread, launch, start AWT, Swing, JavaFX & SWT 0
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
M Start-/ Stop-Button Problem AWT, Swing, JavaFX & SWT 2
J 2D-Grafik JPanel wird erst 1-2sek nach start des JFrames angezeigt AWT, Swing, JavaFX & SWT 3
javampir 3D-Grafik JPCT Start AWT, Swing, JavaFX & SWT 2
D Erste Knoten des JTrees bei Start offen AWT, Swing, JavaFX & SWT 8
propra Wieso wird paintComponent() beim Start 2 malausgeführt? AWT, Swing, JavaFX & SWT 4
M Beim Start von TableEditor Inhalt der Zelle markieren. AWT, Swing, JavaFX & SWT 2
T Divider zentrieren bei Gui Start AWT, Swing, JavaFX & SWT 21
V Start Button und Wert Eingabe in ein Fenster AWT, Swing, JavaFX & SWT 2
B JFrame nach Start leer, größer ziehen zeigt Inhalt an AWT, Swing, JavaFX & SWT 2
A Kompilierfehler: illegal start of expression AWT, Swing, JavaFX & SWT 2
R Eingabeaufforderungs-Fenster beim start schliessen - wie? AWT, Swing, JavaFX & SWT 6
V Daten ins JTable laden bei Start der GUI AWT, Swing, JavaFX & SWT 6
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
P Swing Anwendung von LayeredPanel AWT, Swing, JavaFX & SWT 6
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
thor_norsk JavaFX Anwendung stürzt ab AWT, Swing, JavaFX & SWT 4
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
G JavaFX Steuerung bzw. Test von externer JavaFX Anwendung (liegt nur als jar vor) AWT, Swing, JavaFX & SWT 9
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
B JavaFX Wie A4-Seite in meiner Anwendung repräsentieren AWT, Swing, JavaFX & SWT 6
B JavaFX JavaFX Anwendung deployen (entw als runnableJAR oder exe-Datei) AWT, Swing, JavaFX & SWT 15
OSchriever Anwendung aus SystemTray öffnen AWT, Swing, JavaFX & SWT 29
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
T Anwendung mit X schliessen AWT, Swing, JavaFX & SWT 1
L JavaFX OpenJFX13 Anwendung exportieren AWT, Swing, JavaFX & SWT 7
D PDF Viewer in SWT-Anwendung AWT, Swing, JavaFX & SWT 8
O Basics - Anwendung erstellen mit mehreren Szenen AWT, Swing, JavaFX & SWT 1
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
A JavaFX Anwendung in Jar Datei AWT, Swing, JavaFX & SWT 8
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
MiMa Programmeinstellungen für Anwendung?? AWT, Swing, JavaFX & SWT 54
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
I JFileChooser mit System L&F bei anderem L&F der eigtl. Anwendung AWT, Swing, JavaFX & SWT 0
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
L JavaFX PdfViewer für JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
D JafaFX Anwendung beenden AWT, Swing, JavaFX & SWT 11
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
X Anwendung skalierbar AWT, Swing, JavaFX & SWT 3
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
D JavaFX Anwendung hängt sich permanent auf AWT, Swing, JavaFX & SWT 6
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
I Variabeln speichern in Desktop Anwendung AWT, Swing, JavaFX & SWT 2
V Anwendung im Vollbild zentrieren AWT, Swing, JavaFX & SWT 13
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
P Anwendung kommt nach minimieren nicht mehr in den Vordergrund AWT, Swing, JavaFX & SWT 5
K 3D-Grafik Anwendung von Java in Gnuplot AWT, Swing, JavaFX & SWT 3
M SWT Anwendung in der Symbolleiste verstecken AWT, Swing, JavaFX & SWT 5
B SWT Redesign SWT Anwendung AWT, Swing, JavaFX & SWT 7
M Java anwendung VOR vollbildspielen (schon wieder...) AWT, Swing, JavaFX & SWT 5
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
VfL_Freak Swing Zweiter Monitor von Java-Anwendung ansprechbar ?? AWT, Swing, JavaFX & SWT 2
S Swing Ist meine gute Java Anwendung vorgängig? AWT, Swing, JavaFX & SWT 20
P Klassenaufbau bei komplexerer GUI Anwendung AWT, Swing, JavaFX & SWT 14
S Java GUI Anwendung ohne Konsole starten AWT, Swing, JavaFX & SWT 6
qwerqer Swing Anwendung soll blinken (Taskleiste) AWT, Swing, JavaFX & SWT 3
R Java Desktop Anwendung erstellen. Womit? AWT, Swing, JavaFX & SWT 3
eLogic Fullscreen anwendung aus der man nicht rauskommt AWT, Swing, JavaFX & SWT 37
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
H Anwendung schließen ohne System.exit AWT, Swing, JavaFX & SWT 5
R Anwendung ohne Symbol in der Taskleiste AWT, Swing, JavaFX & SWT 3
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
G Swing Update-Funktion für Swing-Anwendung AWT, Swing, JavaFX & SWT 5
C Swing Eine SWING-Anwendung mittels MVC AWT, Swing, JavaFX & SWT 4
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
B SWT Hello World-Anwendung mit GUI in Eclipse -Problem mit Import von SWT AWT, Swing, JavaFX & SWT 9
G Applet und Swing Anwendung AWT, Swing, JavaFX & SWT 2
J Client Server Anwendung - Mehrere Clients in einer Server GUI AWT, Swing, JavaFX & SWT 11
F Anwendung auf Teskleiste legen AWT, Swing, JavaFX & SWT 3
B MDI Anwendung alle maximierten InternalFrames in Tabs AWT, Swing, JavaFX & SWT 3
T Anwendung starten AWT, Swing, JavaFX & SWT 5
J Anwendung von Swing nach SWT bzw. Eclipse portieren AWT, Swing, JavaFX & SWT 3
2 Tablet-PC Java-Anwendung -> Tablet-Pen Problem !! AWT, Swing, JavaFX & SWT 3
J Swing Anwendung schließen im Listener AWT, Swing, JavaFX & SWT 3
isowiz Vorteil einer RCP Anwendung gegenüber Swing AWT, Swing, JavaFX & SWT 3
? Java-SWT-Anwendung in der Taskleiste nicht sichtbar AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben