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

classpath, java, jython, libraries

Solution

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

Problem

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

Original source