2017-04-04 48 views
2

上周我完成了测试应用程序的开发并在所有模拟器中成功运行。 今天,我决定看看发布应用程序,并使用“发送Android构建”。构建状态“成功”。 然后在命令行中尝试运行罐子,并得到:在IDE中运行应用程序停止工作

[email protected]:~> java -jar "/home/peter/NetBeansProjects/mobile-apps/pGame/dist/pGame.jar" 
java.lang.ArrayIndexOutOfBoundsException: 0 
    at com.codename1.impl.javase.Executor$1.run(Executor.java:84) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 

所以试图从GUI运行,并得到了:

run: 
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javafx/embed/swing/JFXPanel 
    at com.codename1.impl.ImplementationFactory.createImplementation(ImplementationFactory.java:69) 
    at com.codename1.ui.Display.init(Display.java:566) 
    at com.codename1.impl.javase.Executor$1.run(Executor.java:112) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 

Java版本:

[email protected]:~> java -version 
openjdk version "1.8.0_121" 
OpenJDK Runtime Environment (IcedTea 3.3.0) (suse-23.1-x86_64) 
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) 

我使用NetBeans(新到Suse Linux 42.1 64b)。

我在某处丢失了图书馆吗?或者是其他东西?

回答

0

JFXPanel是在JavaFX library

请参阅:JavaFX and OpenJDK了解为什么JavaFX在您的OpenJDK发行版中默认不可用。

  1. 如果你的Linux发行版,使提供一个开放的JavaFX包(如Ubuntu的作用:Why is JavaFX is not included in OpenJDK 8 on Ubuntu Wily (15.10)?),那么你可以使用它。
  2. 否则你可以build from source(为冒险的牦牛剃须刀)。
  3. 或者,最简单的就是Oracle Java distribution

我不知道codenameone或有什么想法,它是如何工作的。可能无论它是什么,你都可以让创作者将他们的东西打包为self-contained application,这样它就可以与兼容的Java运行时一起运行,从而可以(可能)避免遇到的问题。不知道codenameone,我不知道这是否有意义。

我也不知道你原来的ArrayIndexOutOfBoundsException的原因,因为它看起来像codenameone或你的使用内部。


至于NetBeans中,您可能需要set the Java platform一个JavaFX的安装(如果你有在计算机上安装多个Java平台)。

0

您可以通过按下IDE中的播放按钮在模拟器中运行Codename One应用程序。它不适用于你的命令行,因为应用程序不应该有main()方法。

可以使用从执行命令行的代号一个模拟器:

java -jar JavaSE.jar:dist/MyApp.jar 

声明本假定你的项目的工作目录。

1

谢谢你们。我通过将jfxrt.jar添加到NetBeans中的库中解决了该问题。