0

我有一个在 Eclipse 中完美运行的大型应用程序,我为我的应用程序创建了一个可执行的 jar 文件,我的应用程序使用jython来定义一些资源。我还创建了以下 .bat 文件来运行该文件:

    @ echo off 
java -Xms64m -Xmx512m -Xincgc -Dpython.home=jython-2.1 -Dpython.path=jython-2.1/Lib/alice -Djava.library.path=lib/win32;externalLib/win32; -jar MyProg23.jar

执行 .bat 文件时出现异常,这是此异常的一部分:

java.lang.ExceptionInInitializerError
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at edu.cmu.cs.stage3.alice.authoringtool.JAlice.main(JAlice.java:163)
Caused by: Traceback (innermost last):
  File "C:\MyWork\AliceDev\Alice test\resources\Alice Style.py", line 23, in ?
  File "C:\MyWork\AliceDev\Alice test\resources\common\StandardResources.py", li
ne 181, in ?
AttributeError: java package 'javax' has no attribute 'vecmath'

        at org.python.core.Py.AttributeError(Py.java)
        at org.python.core.PyObject.__getattr__(PyObject.java)
        at org.python.pycode._pyx1.f$0(C:\MyWork\AliceDev\Alice test\resources\c
ommon\StandardResources.py:181)
        at org.python.pycode._pyx1.call_function(C:\MyWork\AliceDev\Alice test\r
esources\common\StandardResources.py)
        at org.python.core.PyTableCode.call(PyTableCode.java)
        at org.python.core.PyCode.call(PyCode.java)
        at org.python.core.Py.runCode(Py.java)
        at org.python.core.__builtin__.execfile_flags(__builtin__.java)
        at org.python.core.__builtin__.execfile(__builtin__.java)
        at org.python.core.__builtin__.execfile(__builtin__.java)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java
)
        at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java
)
        at org.python.core.PyObject.__call__(PyObject.java)
        at org.python.pycode._pyx0.f$0(C:\MyWork\AliceDev\Alice test\resources\A
lice Style.py:23)
        at org.python.pycode._pyx0.call_function(C:\MyWork\AliceDev\Alice test\r
esources\Alice Style.py)
        at org.python.core.PyTableCode.call(PyTableCode.java)
        at org.python.core.PyCode.call(PyCode.java)
        at org.python.core.Py.runCode(Py.java)
        at org.python.core.__builtin__.execfile_flags(__builtin__.java)
        at org.python.core.__builtin__.execfile(__builtin__.java)
        at edu.cmu.cs.stage3.alice.authoringtool.AuthoringToolResources.loadReso
urcesPy(AuthoringToolResources.java:199)
        at edu.cmu.cs.stage3.alice.authoringtool.AuthoringToolResources.<clinit>
(AuthoringToolResources.java:108)
        ... 3 more

vecmath.jar文件和其他外部库位于名为 externalLib 的文件夹中,该文件夹位于Myprog23.jar.bat文件的同一文件夹中

如何解决问题,需要设置什么?

4

2 回答 2

0

您需要将程序中使用的所有 jar 添加到类路径中。因此,在您的情况下,externalLib 目录中存在的所有 jar 都应添加到类路径中。

要在类路径中添加 jar,您可以参考Setting multiple jars in java classpath

于 2015-04-07T05:43:44.850 回答
0

我假设您已经正确设置了 CLASSPATH 变量。还假设您已正确安装 JyThon。您真的应该确保在您的应用程序环境之外测试JyTon hello world 。你需要一步一步来,Alice 是一个复杂的系统,所以如果没有确定库的基本结构就很难调试你的问题。

有了这些假设,您可以继续阅读 JyThon 文档常见问题解答

Jython 找不到您的 Java 类,即使它存在于类路径中。

Jython 找不到您的 Java 类,即使它存在于类路径中。这显示为“ImportError: cannot import name xxx”或“AttributeError: java package xxx' has no attribute 'yyy'” 当 Jython 作为 Java 扩展安装时会发生这种情况(即当 jython.jar 安装在 java\jre\ lib\ext) 并且您的类安装在类路径中。

原因是 Java 扩展只能看到其他扩展,而不是 CLASSPATH 中定义的其他类或使用 --classpath 选项传递给 java 的其他类。

有两种方法可以解决此问题:

  1. 将您的类移动到 java\jre\lib\ext 目录。

  2. 从 java\jre\lib\ext 目录中删除 jython.jar 并将 jython.jar 放入 CLASSPATH 或使用 java --classpath 选项。

于 2015-04-10T16:08:23.947 回答