当前位置:  开发笔记 > 编程语言 > 正文

示例WorldWind应用程序在启动时遇到AbstractMethodError

如何解决《示例WorldWind应用程序在启动时遇到AbstractMethodError》经验,为你挑选了1个好方法。

我的任务是使用WorldWind API创建应用程序,为了熟悉API,我尝试运行"HelloWorldWind"示例应用程序.当我这样做时,我得到以下错误堆栈:

Exception in thread "main" java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V
    at gov.nasa.worldwind.util.WWXML.createDocumentBuilder(WWXML.java:61)
    at gov.nasa.worldwind.util.WWXML.openDocumentStream(WWXML.java:236)
    at gov.nasa.worldwind.util.WWXML.openDocumentStream(WWXML.java:223)
    at gov.nasa.worldwind.util.WWXML.openDocumentFile(WWXML.java:175)
    at gov.nasa.worldwind.util.WWXML.openDocument(WWXML.java:148)
    at gov.nasa.worldwind.Configuration.loadConfigDoc(Configuration.java:131)
    at gov.nasa.worldwind.Configuration.(Configuration.java:108)
    at gov.nasa.worldwind.Configuration.(Configuration.java:76)
    at gov.nasa.worldwindx.examples.HelloWorldWind.main(HelloWorldWind.java:

WWXML.createDocumentBuilder 如下:

public static DocumentBuilder createDocumentBuilder(boolean isNamespaceAware)
{
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    docBuilderFactory.setNamespaceAware(isNamespaceAware);
    if (Configuration.getJavaVersion() >= 1.6)
    {
        try
        {
            docBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd",
                false);    // Not getting past here
        }
        catch (ParserConfigurationException e)
        {   // Note it and continue on. Some Java5 parsers don't support the feature.
            String message = Logging.getMessage("XML.NonvalidatingNotSupported");
            Logging.logger().finest(message);
        }
    }
    ...

在线阅读一些内容,人们都在责备jogl,因为我在64位系统上运行,但是,我已经在构建路径中拥有必要的jar. 此外,在浏览器中尝试上面显示的URL会返回404页面,这使我认为可能是原因URL只是格式化某些首选项的一种方式.由于我没有源代码DocumentBuilderFactory.setFeature,我无法看到那里有什么混乱.

我的问题实际上是jogl,或其他什么?



1> Dev..:

这是某种类路径问题.AbstractMethodError当JVM尝试调用抽象方法(不允许)时抛出.DocumentBuilderFactory.setFeature(String, boolean)是一个在JavaSE 5中添加到DocumentBuilderFactory的抽象方法,因此针对J2SE 1.4.2版本编译的实现将没有该方法,并且在setFeature(String, boolean)调用它们时会发生此错误.

您可能在类路径上有一个旧的XML库,它返回了一个实例DocumetnBuilderFactory.newInstance().问题可能不在于JOGL本身,它可能只是JOGL将旧的XML库作为依赖项引入.


@MBraedley您应该检查正在加载的xerces的版本.你可以通过调用`MyClass.class.getClassLoader().getResource("org/apache/xerces/jaxp/DocumentBuilderFactoryImpl.class");`来打印生成的URL.替换`MyClass.class`的相关类.`HelloWorldWind.class`可能会这样做.希望您可以检查URL指示的jar文件以确定它的年龄.
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有