2016-11-04 5 views
1

Ein Kollege von mir versuchte, die JavaFXPorts-Anwendung von mir auf seiner Maschine zu erstellen. Die gute Sache ist: nach ein paar kleineren Updates der forceLinkClasses Teil in der build.gradle Datei, hat es funktioniert. Aber ...Schwarzer Bildschirm für einige Sekunden während des Starts

Während wir eines der weißen Bilder kurz sehen können, werden wir für ca. 5 Sekunden mit einem schwarzen Bildschirm konfrontiert.

Auf der Konsole, kann er die folgende Ausgabe (ua) finden Sie unter:

[WARN] java.lang.Class: Class.forName() failed to load 'ch.cnlab.disentis.resource.strings_en'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>ch.cnlab.disentis.resource.strings_en</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'ch.cnlab.disentis.resource.strings_de_CH'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>ch.cnlab.disentis.resource.strings_de_CH</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'ch.cnlab.disentis.resource.strings_de'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>ch.cnlab.disentis.resource.strings_de</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'ch.cnlab.disentis.resource.strings'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>ch.cnlab.disentis.resource.strings</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.fasterxml.jackson.databind.ext.Java7SupportImpl'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.fasterxml.jackson.databind.ext.Java7SupportImpl</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
Nov 4, 2016 11:32:44 AM com.fasterxml.jackson.databind.ext.Java7Support <clinit> 
WARNING: Unable to load JDK7 types (annotations, java.nio.file.Path): no Java7 support added 
[WARN] java.lang.Class: Class.forName() failed to load 'javax.xml.stream.FactoryFinder$ClassLoaderFinderConcrete'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>javax.xml.stream.FactoryFinder$ClassLoaderFinderConcrete</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'javax.xml.stream.FactoryFinder$ClassLoaderFinderConcrete'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>javax.xml.stream.FactoryFinder$ClassLoaderFinderConcrete</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'javax.xml.stream.FactoryFinder$ClassLoaderFinderConcrete'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>javax.xml.stream.FactoryFinder$ClassLoaderFinderConcrete</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'javax.xml.stream.FactoryFinder$ClassLoaderFinderConcrete'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>javax.xml.stream.FactoryFinder$ClassLoaderFinderConcrete</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.sun.javafx.font.t2k.T2KFactory'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.sun.javafx.font.t2k.T2KFactory</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.sun.javafx.tk.quantum.QuantumMessagesBundle_de_CH'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.sun.javafx.tk.quantum.QuantumMessagesBundle_de_CH</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.sun.javafx.tk.quantum.QuantumMessagesBundle_de'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.sun.javafx.tk.quantum.QuantumMessagesBundle_de</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.sun.javafx.tk.quantum.QuantumMessagesBundle'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.sun.javafx.tk.quantum.QuantumMessagesBundle</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.oracle.jrockit.jfr.FlightRecorder'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.oracle.jrockit.jfr.FlightRecorder</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.sun.javafx.scene.control.skin.resources.controls_de_CH'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.sun.javafx.scene.control.skin.resources.controls_de_CH</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.sun.javafx.scene.control.skin.resources.controls_de'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.sun.javafx.scene.control.skin.resources.controls_de</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
[WARN] java.lang.Class: Class.forName() failed to load 'com.sun.javafx.scene.control.skin.resources.controls'. Use the -forcelinkclasses command line option or add <forceLinkClasses><pattern>com.sun.javafx.scene.control.skin.resources.controls</pattern></forceLinkClasses> to your robovm.xml file to link it in. 
setSwapInterval(1) 
max rectangle texture cell size = 89 
wrap rectangle texture = 2 x 2 
ES2ResourceFactory: Prism - createStockShader: AlphaTexture_Color.frag 
ES2ResourceFactory: Prism - createStockShader: FillRoundRect_Color.frag 
ES2ResourceFactory: Prism - createStockShader: DrawRoundRect_Color.frag 
ES2ResourceFactory: Prism - createStockShader: Texture_Color.frag 
ES2ResourceFactory: Prism - createStockShader: Solid_TextureRGB.frag 
Loading Prism common native library ... 
     succeeded. 
setSwapInterval(0) 
setSwapInterval(1) 
setSwapInterval(0) 
setSwapInterval(1) 
setSwapInterval(0) 
setSwapInterval(1) 
setSwapInterval(0) 

Die Verzögerung nach den RoboVM Warnungen zu geschehen scheint.

Hat jemand eine Idee, was die Ursache dafür sein könnte?

Danke und Gruß, Daniel

PS: Ich brauchte diese zu fragen, weil er kein Konto auf Stackoverflow hat ... So könnte es einige Roundtrip-Zeit sein, wenn ich ihn fragen müssen, wieder zu testen.

Antwort

0

Dank @ JoséPereda fanden wir das Problem: Es war das iPhone für den Test verwendet. Dies ist ein älteres Telefon, das oft für die Entwicklung verwendet wird. Und offensichtlich ist es in einem "fast-toten" Zustand.

Nachdem wir zu einem anderen Telefon (iPhone 6S eines anderen Kollegen :-D) gewechselt hatten, verhielt sich die Anwendung wie erwartet: blitzschnell während des Tests.

1

Normalerweise bedeutet ein schwarzer Bildschirm während einiger Sekunden, dass beim Start eine starke Last auftritt.

Bevor Sie weitermachen, vergewissern Sie sich, dass die Ladung unbedingt erforderlich ist, und überprüfen Sie, ob das Problem durch eine Hintergrundaufgabe gelöst wird.

Wenn das nicht hilft, gibt es mehrere Optionen, um den langen schwarzen Bildschirm zu vermeiden:

One, mit einem JavaFX preloader. Erstellen Sie Ihre Preloader-Klasse, die sich von Preloader erstreckt, und stellen Sie eine leichte Szene (d. H. Ein Bild) bereit. Fügen Sie in Ihrem Skript build.gradle preloaderClassName = 'full.preloader.class.name' hinzu.

Wenn die schwere Last endet (dies sollte in der init Methode durchgeführt werden), wird die Anwendung geladen, und Sie können die Preloader-Phase ausblenden. Sie können über Preloader here und here lesen.

Verwenden Sie Gluon Mobile (Charm 4.0.1), verwenden Sie ein leichtes Gewicht Home View, die schnell genug lädt, und starten Sie auf dem Hintergrund diese schweren Aufgaben zu laden. Der Benutzer muss eine Navigationsschaltfläche oder die Navigationsschublade verwenden, um zur sekundären Ansicht zu wechseln. Der eventuell vorhandene schwarze Bildschirm ist jedoch kürzer.

Und schließlich mit einem Splash View (bereits in Charm 4+ enthalten), erlaubt es, ein Bild oder ein Etikett für eine kurze Zeit anzuzeigen, während eine Aufgabe ausgeführt werden kann, um diese schweren Komponenten zu laden. Danach kann der Splash beendet werden und die Home-Ansicht wird geladen.

Versuchen Sie eine dieser Lösungen und prüfen Sie, ob das Problem behoben ist.

+0

Danke für Ihre Antwort, José. Das Problem ist, dass bis auf einige FXML-Ladungen zu diesem Zeitpunkt nichts getan wird, also sollte es keinen Sinn für eine schwere Last geben. Unter Android können Sie kaum die native Aktivität sehen. Im Moment benutze ich nur javafxport und ein bisschen Charme, keine Views, also kann ich mich leider nicht darauf verlassen. Ich dachte, ich hätte Probleme mit dem vorgeschlagenen Preloader auf iOS früher, also habe ich es aufgegeben, aber ich werde es noch einmal versuchen. – dzim

+0

Was ist das iOS-Gerät? Was passiert mit einem sehr einfachen Projekt? –

+0

Weiß nicht. Da ich solche Geräte nicht habe, muss ich meinen Kollegen bitten, es zu testen. Ich werde ihn fragen, ob er das kann und Ihnen weitere Details geben wird, OK? – dzim

Verwandte Themen