在IDE中运行应用程序停止工作

时间:2017-04-04 01:06:07

标签: codenameone

上周,我在测试应用程序上完成了开发,并在所有模拟器中成功运行。 今天我决定考虑发布应用程序并使用" Sent Android Build"。建立状态"成功"。 然后尝试从命令行运行jar并得到:

peter@PeteSuse:~> 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版:

peter@PeteSuse:~> 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)

我在Suse Linux 42.1 64b上使用Netbeans(新的)。

我在某个地方丢了一个图书馆吗?或其他什么?

3 个答案:

答案 0 :(得分:1)

谢谢你们。我通过将jfxrt.jar添加到NetBeans中的库来修复此问题。

答案 1 :(得分:0)

JFXPanel位于JavaFX library

有关为什么默认情况下OpenFDK发行版中没有JavaFX可用的信息,请参阅:JavaFX and 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
  4. 我不知道codenameone或知道它是如何工作的。可能无论它是什么,你都可以要求创建者将它们的东西打包为self-contained application,这样它就会附带一个兼容的Java运行时,它会(可能)避免你遇到的问题。不知道codenameone,我不知道这是否有意义。

    我也不知道你原来ArrayIndexOutOfBoundsException的原因,因为这看起来是代号的内部或你对它的使用。

    关于NetBeans,您可能需要set the Java platform安装JavaFX(如果您的计算机上安装了多个Java平台)。

答案 2 :(得分:0)

您可以通过按IDE中的播放按钮在模拟器中运行Codename One应用程序。它不会从命令行为你工作,因为应用程序不应该有main()方法,所以不应该这样做。

您可以使用以下命令从命令行执行Codename One模拟器:

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

请注意,这假设您的项目是工作目录。