JAVA 1.6.027からJython 2.5.3スクリプトを実行するアプリケーションに取り組んでいます。スクリプトはコーデック ライブラリを使用してファイルを開くだけで、次のようになります。
try:
from codecs import open as codecs_open
except ImportError:
print 'ERROR', 'Could not import.'
CODECS_LIST = ['latin-1', 'utf-8', 'utf-16', '1250', '1252']
def open_file(filename, mode):
'''
DOC
'''
for encoding in CODECS_LIST:
try:
f = codecs_open(filename, mode, encoding)
f.read()
f.close()
print 'INFO', "File %s supports encoding %s." % (filename.split("\\")[-1], encoding)
...
except:
...
Eclipseでこのスクリプトのデバッグを実行すると、すべて正常に動作しますが、このスクリプトを呼び出す Java アプリケーションの一部を実行すると、次のエラーが発生します。
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.nio.ch.FileChannelImpl
at java.io.RandomAccessFile.getChannel(RandomAccessFile.java:253)
at org.python.core.io.FileIO.fromRandomAccessFile(FileIO.java:173)
at org.python.core.io.FileIO.<init>(FileIO.java:79)
at org.python.core.io.FileIO.<init>(FileIO.java:57)
at org.python.core.PyFile.<init>(PyFile.java:135)
at org.python.core.PyTraceback.getLine(PyTraceback.java:65)
at org.python.core.PyTraceback.tracebackInfo(PyTraceback.java:38)
at org.python.core.PyTraceback.dumpStack(PyTraceback.java:109)
at org.python.core.PyTraceback.dumpStack(PyTraceback.java:120)
at org.python.core.Py.displayException(Py.java:1080)
at org.python.core.PySystemState.excepthook(PySystemState.java:1242)
at org.python.core.PySystemStateFunctions.__call__(PySystemState.java:1421)
at org.python.core.Py.printException(Py.java:1053)
at org.python.core.Py.printException(Py.java:1012)
at org.python.util.jython.run(jython.java:264)
at org.python.util.jython.main(jython.java:129)
JAVA アプリケーションは、他の同様の jython スクリプトを実行できます。クラス sun.nio.ch.FileChannelImplがライブラリ rt.jar にあることを検出しました。これは/bin/common/フォルダー内にあり、jvm.cfgファイルを介してクラスパスに含まれています。
...
#LIBRARY PATH
./bin/common;...
...
正常に動作する他のライブラリで行うのと同じ方法です。
私はこの問題に数日間悩まされてきたので、助けていただければ幸いです。ありがとうございました