2010-07-06 82 views
0

我試圖使用JScience解析mathml文檔,但沒有成功。以下是我的一段代碼。使用JScience解析mathml文檔

import JSci.io.*; 
import JSci.mathml.*; 
    . 
    . 
public class ParsingMathML(){ 
try { 
     .... 
     //inputFile is an xml file containing mathml code 
InputSource file = new InputSource(new FileReader(inputFile)); 
MathMLParser parser = new MathMLParser(); 
parser.parse(file); 

Object[] parseList = parser.translateToJSciObjects(); 
}catch (Exception e) { 
e.printStackTrace(); 
} 
} 

我從這裏得到了錯誤,所以我什麼都做不了。以下是堆棧跟蹤:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: JSci/maths/fields/Ring$Member 
at JSci.io.MathMLParser.translateToJSciObjects(Unknown Source) 
at JSci.io.MathMLParser.translateToJSciObjects(Unknown Source) 
at mathML.ProcessMathML.processFile(ParsingMathML.java:109) 
at mathML.ProcessMathML.actionPerformed(ParsingMathML.java:72) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.AbstractButton.doClick(Unknown Source) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: JSci.maths.fields.Ring$Member 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
... 31 more 

而且,沒有任何一個有任何想法如何使用MathMLApplyElementImpl,MathMLDocumentImpl或JSci.mathml包中的任何其他類?

如果您可以提供一些關於如何解析mathml文檔的代碼示例,那將會很棒。

任何想法將不勝感激。 謝謝

回答

2

共同確定你的確切的bug,看起來類JSci.maths.fields.Ring$Member不存在,它會拋出方法JSci.io.MathMLParser.translateToJSciObjects中的ClassNotFoundException。

讓我們來看看這個源代碼。 在MathMLParser中,最顯着的用法是Ring.Member作爲返回值。但它可以在很多地方找到。 而且,由於Ring.Member在JSci.maths.fields中,它似乎與MathMLParser在相同的JAR中,所以我猜你的問題比簡單的ClassNotFoundException複雜得多。

首先,您可以打開JScience jar以確保JSci.maths.fields.Ring$Member確實存在嗎?

如果不是這種情況,您是否在同一個應用程序中使用多個類加載器? (像OSGi的東西)

+0

太棒了!謝謝Riduiel。我可以通過導入包來修復該錯誤,其中包含,正如你所猜測的那樣。然而,無論我在parser.parse(file)中使用哪個文件,parseList []都是一個空數組。你有什麼主意嗎? 謝謝 – chepukha 2010-07-06 14:14:01