java.lang.NoClassDefFoundError: Could not initialize class sun.nio.ch.FileChannelImpl

こ雲淡風輕ζ 提交于 2020-01-03 17:03:02

问题


I am working on an application that executes a Jython 2.5.3 script from JAVA 1.6.027. The script just open a file using codecs library and it looks like this:

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:
            ...

When I execute this script debugging in Eclipse, everything works OK, but when I execute the part of the JAVA application that invokes this script, I get this error:

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)

The JAVA application is able to execute others similar jython scripts. I have detected that the class sun.nio.ch.FileChannelImpl is in the library rt.jar, which is inside /bin/common/ folder and included in my classpath via jvm.cfg file:

...    
#LIBRARY PATH
./bin/common;...
...

The same way I do it with other libraries that work fine.

I have been stacked with this problem for a few days, so any help will be appreciated. Thank you


回答1:


The problem has been resolved by reinstalling Java Runtime Environment, in my case version jre-6u45




回答2:


This happened to me because the mysql package that I had installed was installed globally and required root privileges, so when running java, I had to include sudo to get it to work correctly.



来源:https://stackoverflow.com/questions/18444785/java-lang-noclassdeffounderror-could-not-initialize-class-sun-nio-ch-filechanne

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!