buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.javafxports:jfxmobile-plugin:1.1.1'
}
}
apply plugin: 'org.javafxports.jfxmobile'
repositories {
jcenter()
maven {
url 'https://mvnrepository.com/artifact/com.caucho/hessian'
}
maven {
url'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
}
mainClassName = 'com.demoapp.DemoApp'
dependencies {
compile 'com.gluonhq:charm:4.1.0'
compile 'com.airhacks:afterburner.mfx:1.6.2'
compile 'com.caucho:hessian:4.0.7'
compile 'com.google.code.gson:gson:2.3.1'
compile 'org.apache.poi:poi:3.9'
}
jfxmobile {
downConfig {
version '3.0.0'
plugins 'display', 'lifecycle', 'statusbar', 'storage'
}
android {
manifest = 'src/android/AndroidManifest.xml'
}
ios {
infoPList = file('src/ios/Default-Info.plist')
forceLinkClasses = [
'com.demoapp.**.*',
'com.gluonhq.**.*',
'io.datafx.**.*',
'javax.annotations.**.*',
'javax.inject.**.*',
'javax.json.**.*',
'org.glassfish.json.**.*',
'com.caucho.**.*',
'com.google.code.gson.**.*',
'org.apache.poi.**.*'
]
}
}
Application init方法中的错误异常 QuantumRenderer:关机 java.lang.RuntimeException:Application init方法中的异常 at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:109069952) at com.sun.javafx.application.LauncherImpl.lambda $ launchApplication $ 156(LauncherImpl.java:109069952) 在com.sun.javafx.application.LauncherImpl $$ Lambda $ 2.run(未知来源) 在java.lang.Thread.run(Thread.java:109069952) 引起:java.lang.NoSuchMethodError:com.demoapp.DemoApp $$ Lambda $ 1.()V 在com.demoapp.DemoApp.init(DemoApp.java:109070784) at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:109070784) at com.sun.javafx.application.LauncherImpl.lambda $ launchApplication $ 156(LauncherImpl.java:109070784) 在com.sun.javafx.application.LauncherImpl $$ Lambda $ 2.run(未知来源) 在java.lang.Thread.run(Thread.java:109070784)
知道在部署时搜索init-Error的位置..?感谢。
初始化:
@Override
public void init() {
NavigationDrawer drawer = new NavigationDrawer();
NavigationDrawer.Header header = new NavigationDrawer.Header("demo inc", "smart teamwork", new Avatar(21, new Image(DemoApp.class.getResourceAsStream("/icon.png"))));
drawer.setHeader(header);
drawer.getItems().addAll(primaryItem, secondaryItem, thirdItem);
primaryItem.setSelected(true);
addViewFactory(PRIMARY_VIEW, () -> (View) new PrimaryView().getView());
addViewFactory(SECONDARY_VIEW, () -> (View) new SecondaryView().getView());
addViewFactory(THIRD_VIEW, () -> (View) new ThirdView().getView());
addLayerFactory(MENU_LAYER, () -> new SidePopupView(drawer));
}
@Override
public void postInit(Scene scene) {
Swatch.ORANGE.assignTo(scene);
scene.getStylesheets().add(DemoApp.class.getResource("style.css").toExternalForm());
((Stage) scene.getWindow()).getIcons().add(new Image(DemoApp.class.getResourceAsStream("/icon.png")));
switchView(SECONDARY_VIEW);
}
答案 0 :(得分:1)
该异常表明lambda表达式失败。可能是那些使用查看供应商的init
方法。
此例外的可能原因是:
Retrolambda
jfxmobile插件自版本1.1.0 applies retrolambda到所有依赖项。但你不能两次申请。
第一步是检查哪些依赖项可能使用retrolambda。
Charm 4+不使用它。 Afterburner 1.6.2确实如此,所以要么将其更改为:
dependencies {
compileNoRetrolambda 'com.airhacks:afterburner.mfx:1.6.2'
}
或者您使用排除它的全新版本:
dependencies {
compile 'com.airhacks:afterburner.mfx:1.6.3'
}
要确保没有其他依赖项使用它,请在hessian,gson和poi中将compile
替换为compileNoRetrolambda
。
缓存
此外,在使用较低版本的jfxmobile插件更新项目时,您可能在缓存中进行了先前的构建。这可能包含您使用retrolambda编译的类。
虽然代码是相同的,但Gradle会再次跳过编译,但是当对它们再次应用retrolambda插件时,这将失败。
要避免此问题,在构建和部署项目之前,一个简单的解决方案是使用clean
:运行./gradlew clean launchIOSDevice
。