首页 文章

在init上启动iOS失败 . 在当地运行

提问于
浏览
-1
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:shutdown java.lang.RuntimeException:com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:109069952)中com.sun.javafx.application.LauncherImpl的Application init方法中的异常 . lambda $ launchApplication $ 156(LauncherImpl.java:109069952)at com.sun.javafx.application.LauncherImpl $$ Lambda $ 2.run(Unknown Source)at java.lang.Thread.run(Thread.java:109069952)引起:java .lang.NoSuchMethodError:com.demoapp.DemoApp $$ Lambda $ 1.()V at 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)at com.sun.javafx.application.LauncherImpl $$ Lambda $ 2.run(Unknown Source)at 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 回答

  • 1

    该异常表明lambda表达式失败 . 可能是你的 init 方法与查看供应商的那些 .

    此例外的可能原因是:

    Retrolambda

    jfxmobile插件自版本1.1.0 applies retrolambda到所有依赖项 . 但你不能两次申请 .

    第一步是检查哪些依赖项可能使用retrolambda .

    魅力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 .

相关问题