Wie benutzt man javaFX Preloader mit Stand-alone-Anwendung in Eclipse?

7

Meine IDE ist eclipse und mein Projekt ist eine eigenständige javaFX-Anwendung (reine CS-Architektur mit OSGI-Framework).

Wie benutzt man Preloader, so würde der Preloader vor meiner Hauptanwendung gestartet und später versteckt?

Ich habe einen Code gefunden Ссылка

Aber ich weiß immer noch nicht, wie ich den Preloader mit meiner Startanwendung in einem OSGI-Framework bereitstellen soll. Ich gebe unten einen Code meiner Startanwendung:

%Vor%

Vielen Dank, alle zusammen.

    
Keon Wang 28.02.2013, 02:04
quelle

2 Antworten

26

Dies ist eine lange Antwort, die schnelle Antwort für den Ungeduldigen ist, diesen Beispielcode zum Anzeigen einer Splash-Seite für einen intensiven Start herunterzuladen Aufgabe und prüfen, ob sie an Ihre Situation angepasst werden kann.

Meine Antwort enthält allgemeine Informationen zur Funktion Preloader in JavaFX. Ihre Frage erwähnt ausdrücklich die Verwendung von Preloader in einer Eclipse- und OSGI-Umgebung, aber ich werde dieses Szenario nicht direkt ansprechen, da ich diese Technologien nicht verwende. Hoffentlich sind die allgemeinen Informationen immer noch auf Ihr Szenario anwendbar.

1. Java bietet native Unterstützung zum Anzeigen einer Splash-Page, wenn Java gestartet wird.

  • Dies funktioniert mit dem -splash:<image> VM-Switch .

Vor- und Nachteile:

+ Der einfachste Weg, um Ihre Standalone-Anwendung ein Splash-Bild anzeigen zu lassen.

+ Kann sehr schnell angezeigt werden    = & gt; Es ist ein Argument, das in den VM-Prozess eingegeben wird. Daher kann (vermutlich) es auch angezeigt werden, bevor die VM selbst vollständig initialisiert wurde.

- Hat eingeschränkte Funktionen    = & gt; erlaubt nur die Anzeige eines Bildes, nicht andere Preloader-Funktionen wie die Meldung von Initialisierungsfortschritt, Animation, Login-Aufforderungen usw. (es sei denn, Sie AWT APIs verwenden )

- Funktioniert nicht auf allen Plattformen bis Java 8 (siehe Ausgabe Mac: Die Verwendung von -splash ist nicht möglich : mit JavaFX 2.2 und JDK 7 ).

2. Preloader können für eigenständige Anwendungen verwendet werden.

Das JavaFX-Preloader-Tutorial enthält ein Beispiel im Abschnitt 9.3.4 Using a Preloader to Display the Application Initialization Progress . Das Lernprogramm enthält ausführbaren Beispielcode in den Klassen LongInitAppPreloader und LongInitApp (verwenden Sie die Klassennamen, die ich in dieser Antwort angegeben habe, da ein Name im Lernprogramm derzeit falsch ist).

Die Beispiel-Standalone-Anwendung hat eine lange Initialisierungszeit und eine benutzerdefinierte Preloader gibt eine Rückmeldung über den Fortschritt der Initialisierung. Das Beispiel simuliert die lange Initialisierung durch eine Aufgabe mit einem Aufruf von Thread.sleep . aber eine echte Anwendung wäre etwas wie das Herstellen von Netzwerkverbindungen, das Abrufen und Analysieren von Netzwerkdaten und das Einrichten der ersten Anwendung Szene .

Preloader sind nicht spezifisch für Applets und WebStart, sondern hauptsächlich auf diese Bereitstellungstypen ausgerichtet. Der Applet- und WebStart-Initialisierungsprozess ist komplexer als die eigenständige Initialisierung von Anwendungen. Ein Großteil der Preloader-Dokumentation ist solchen komplexeren Szenarien gewidmet.

3. Sie müssen keinen Preloader in einem separaten JAR platzieren.

Sie können Preloader in derselben JAR wie Ihre Anwendung Klasse. Für große Anwendungen, die dynamisch über Netzwerkladeprotokolle wie WebStart bereitgestellt und aktualisiert werden, ist es sinnvoll, Preloader in einem separaten JAR zu platzieren . Für eigenständige Anwendungen, die eine netzwerkbasierte Initialisierung durchführen, macht dies wahrscheinlich keinen großen Unterschied, und der separate Verpackungsschritt könnte übersprungen werden, um den Build- und Bereitstellungsprozess zu vereinfachen.

4. Sie können die Preloader-Funktionalität ohne Verwendung eines Preloaders erreichen.

Viel (nicht alles) der Preloader-Funktionalität kann erreicht werden, ohne Preloader .

Sie können:

  1. Erstellen Sie im Bühne : //docs.oracle.com/javafx/2/api/javafx/application/Application.html#start%28javafx.stage.Stage%29 "> start Methode.
  2. Platzieren Sie in der Startphase ein Begrüßungsbild und ProgressBar .
  3. Haben Sie einen Hintergrund Aufgabe für langwierige Anwendungsinitialisierungsprozesse.
  4. Melden Sie den Initialisierungsfortschritt von Ihrer Hintergrundaufgabe zurück in Ihre Startphase.
  5. Nach Abschluss der Initialisierung:
    • a. Ersetzen Sie die Startphase durch eine neu erstellte Anwendungsphase ODER
    • b. Ersetzen Sie den Inhalt der Szene in der Startphase durch eine neue Szene für Ihre Anwendung.

5b wird wahrscheinlich bevorzugt, so dass Sie nicht mehrere Fenster erstellen müssen.

Beispiele für diese Strategie finden Sie unter Antworten auf die folgenden Fragen:

Der zugehörige Beispielcode zum Anzeigen von Splash-Screens für die Fortschrittsüberwachung in JavaFX ohne Verwendung von Preloader lautet:

Der obige Code könnte stattdessen so umgestaltet werden, dass er eine Preloader-Unterklasse verwendet. In diesem Fall gibt es ein wohldefiniertes Framework für die Benachrichtigung über Anwendungsinitialisierungsereignisse, und flexiblere Bereitstellungsmodelle (z. B. Preloader in separaten Jar) sind verfügbar. Die Verwendung von Preloader kann jedoch etwas kompliziert sein. Für einige Implementierungen ist es möglicherweise nicht die Zeit wert, das Preloader -Framework zu verstehen.

5. WebStart Apps haben JNLP-Unterstützung für Splash-Bilder

(Dieser Punkt ist ziemlich irrelevant und nur der Vollständigkeit halber enthalten).

Ich glaube, dass webstart-Anwendungen ein Flag in ihrer jnlp-Datei haben können , um das Startbild als Webstart anzuzeigen Die Anwendung wird zwar gestartet, aber ich konnte dieses Flag nie in einer JavaFX 2-Anwendung, nur in einer Swing-Anwendung verwenden, und selbst dann war es nicht so zuverlässig, da es nur beim zweiten Start der Anwendung angezeigt würde.

    
jewelsea 01.03.2013, 00:57
quelle
0

IMHO ein Preloader macht nur Sinn, wenn Sie als Applet oder Webstart laufen, weil der Preloader als zusätzliches Jar gepackt werden kann, das zuerst heruntergeladen und ausgeführt wird, während der Rest Ihrer Anwendung im Hintergrund heruntergeladen wird.

Also wäre mein Vorschlag, eine Bühne zum ersten Zeitpunkt zu öffnen, wenn Sie eine Bühne bekommen und z. zeige einen Splash.

    
tomsontom 28.02.2013 08:11
quelle

Tags und Links