在init上启动iOS失败。在本地运行

时间:2016-11-22 15:32:17

标签: javafx gluon hessian

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);
}

1 个答案:

答案 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