2016-11-04 186 views
1

我的一位同事试图在他的机器上构建我的JavaFXPorts应用程序。好处是:在对build.gradle文件中的forceLinkClasses部分进行了一些小的更新后,该文件起作用了。 但是...启动期间黑屏几秒钟

虽然我们可以简单地看到一张白色的图像,但我们仍然会遇到黑屏约5秒钟。

在控制台上,他可以看到下面的输出(其中包括):

[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) 

延迟似乎RoboVM警告后发生。

有没有人有任何想法,这可能是什么原因?

感谢和问候, 丹尼尔

PS:我需要问这个,因为他在计算器上不考虑...所以可能有一些往返时间,如果我要问他再次测试。

回答

0

感谢@JoséPereda,我们发现了这个问题:它是用于测试的iPhone。这是一款经常用于开发的旧手机。显然,它处于“近乎死亡”的状态。

当我们切换到另一个电话(另一个同事的iPhone 6S:-D)后,应用程序表现得像预期的那样:在测试过程中闪电般快速。

1

通常在几秒钟内出现黑屏意味着启动时存在一些沉重的负载。

在继续之前,请确保加载是绝对必要的,并检查在后台任务中是否解决此问题。

如果没有帮助,有几个选项,以避免长时间黑屏:

一,使用一个JavaFX 预加载。创建从Preloader延伸的预加载器类,并提供一个轻量级场景(即图像)。在你的build.gradle脚本中添加preloaderClassName = 'full.preloader.class.name'

当重负载结束时(这应该在init方法中完成),应用程序将被加载,并且您可以隐藏预加载器阶段。

你可以阅读关于预加载器herehere

使用胶子手机(魅力4.0.1),使用轻量级主页视图加载速度不够快,并开始在背景上加载这些繁重的任务。用户将不得不使用某个导航按钮或导航抽屉切换到辅助视图,但黑屏(如果有的话)会更短。

最后使用飞溅视图(已包含在Charm 4+中),它可以在短时间内显示图像或某个标签,同时可以执行任务来加载这些沉重的组件。之后,飞溅 可以被解雇,并且主视图将被加载。

尝试以上任何解决方案并检查问题是否消失。

+0

谢谢你的回复,何塞。问题是,除了一些FXML加载之外,目前没有做任何事情,因此无论如何应该没有重点负担。在Android上,您几乎看不到本机活动的出现。目前,我只使用javafxport和一些魅力,没有视图的东西,所以不幸的是,现在我不能依赖它。我认为我之前在iOS上提出的预加载器存在一些问题,所以我放弃了它,但我会再试一次。 – dzim

+0

什么是iOS设备?一个非常简单的项目会发生什么? –

+0

不知道。由于我没有这样的设备,我需要问我的同事来测试它。我会问他,如果他能做到这一点,并会提供更多细节,好吗? – dzim