使用jython异常运行时java jar文件

时间:2015-04-07 05:24:39

标签: batch-file jython executable-jar attributeerror vecmath

我有一个在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 <的相同文件夹中/ em>文件

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我假设您已正确设置CLASSPATH变量。假设您已正确安装JyThon。您应该确保确保 TEST JyThon hello world 您的应用程序环境的外部。您需要一步一步地执行此操作,Alice是一个复杂的系统,因此很难在不确保库的基本结构到位的情况下调试您的问题。

根据这些假设,您可以继续使用JyThon文档FAQ

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

  

Jython找不到你的Java类,即使它存在于类中   路径。这显示为&#34; ImportError:无法导入名称xxx&#34;要么   &#34; AttributeError:java包xxx&#39;没有属性&#39; yyy&#39;&#34;   当Jython作为Java扩展安装时(即何时)   jython.jar安装在java \ jre \ lib \ ext中,你的类是   安装在类路径中。

     

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

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

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

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