线程" main"中的例外情况java.lang.ExceptionInInitializerError引起:javax.xml.bind.DataBindingException:javax.xml.bind.JAXBException

时间:2018-04-10 01:45:39

标签: java runtime-error

如果我的问题没有以正确的格式或缺少信息,请道歉。请让我知道,我会根据需要进行编辑。

我是一位尝试使用java工具分析数据的生物学家(https://omics.pnl.gov/software/ms-gf)。我没有使用java编程的经验。我使用以下命令运行程序:

java -classpath /path/to/MSGFPlus.jar -Xmx3500M -jar /path/to/MSGFPlus.jar -s /path/to/datafile1 -d /path/to/datafile2

程序运行但在最后阶段失败,并产生以下错误。从谷歌搜索我发现了这个解释:"线程中的例外"主要" java.lang.NoClassDefFoundError:表示在类路径中找不到您尝试运行的类。解决方案:您需要将包含此类的类或.jar文件添加到java类路径中。"

我遵循了建议,并使用export CLASSPATH="/path/to/MSGFPlus.jar"和在上面的java调用中声明它将jar文件添加到类路径中。既没有修复错误。

有关如何解决这个问题的任何见解?

Exception in thread "main" java.lang.ExceptionInInitializerError
    at uk.ac.ebi.jmzidml.model.utils.ModelConstants.<clinit>(ModelConstants.java:50)
    at uk.ac.ebi.jmzidml.xml.jaxb.marshaller.MarshallerFactory.initializeMarshaller(MarshallerFactory.java:35)
    at uk.ac.ebi.jmzidml.xml.io.MzIdentMLMarshaller.marshal(MzIdentMLMarshaller.java:100)
    at uk.ac.ebi.jmzidml.xml.io.MzIdentMLMarshaller.marshal(MzIdentMLMarshaller.java:91)
    at edu.ucsd.msjava.mzid.MZIdentMLGen.writeResults(MZIdentMLGen.java:143)
    at edu.ucsd.msjava.mzid.MZIdentMLGen.writeResultsOriginal(MZIdentMLGen.java:130)
    at edu.ucsd.msjava.mzid.MZIdentMLGen.writeResultsCleanerTempFile(MZIdentMLGen.java:214)
    at edu.ucsd.msjava.mzid.MZIdentMLGen.writeResults(MZIdentMLGen.java:113)
    at edu.ucsd.msjava.ui.MSGFPlus.runMSGFPlus(MSGFPlus.java:399)
    at edu.ucsd.msjava.ui.MSGFPlus.runMSGFPlus(MSGFPlus.java:106)
    at edu.ucsd.msjava.ui.MSGFPlus.main(MSGFPlus.java:57)
Caused by: javax.xml.bind.DataBindingException: javax.xml.bind.JAXBException
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
    at javax.xml.bind.JAXB.unmarshal(JAXB.java:186)
    at uk.ac.ebi.jmzidml.MzIdentMLElement.loadProperties(MzIdentMLElement.java:1102)
    at uk.ac.ebi.jmzidml.MzIdentMLElement.<init>(MzIdentMLElement.java:989)
    at uk.ac.ebi.jmzidml.MzIdentMLElement.<clinit>(MzIdentMLElement.java:39)
    ... 11 more
Caused by: javax.xml.bind.JAXBException
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:241)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:455)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:652)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:599)
    at javax.xml.bind.JAXB$Cache.<init>(JAXB.java:127)
    at javax.xml.bind.JAXB.getContext(JAXB.java:154)
    at javax.xml.bind.JAXB.unmarshal(JAXB.java:183)
    ... 14 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:573)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:239)
    ... 20 more

1 个答案:

答案 0 :(得分:1)

令人惊讶的是,我设法解决了它!

对于遇到相同问题的任何人,解决方案是遵循此处的建议How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9。具体来说,添加--add-modules java.xml.bind

结束工作的最后一个电话是

java --add-modules java.xml.bind -classpath /path/to/MSGFPlus.jar -Xmx3500M -jar /path/to/MSGFPlus.jar -s /path/to/datafile1 -d /path/to/datafile2