示例WorldWind应用程序在启动时遇到AbstractMethodError
我的任务是使用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
或其他东西吗?
这是某种类路径问题。 当JVM尝试调用抽象方法(不允许)时,抛出AbstractMethodError
。 DocumentBuilderFactory.setFeature(String, boolean)
是一个在JavaSE 5中添加到DocumentBuilderFactory的抽象方法,因此针对J2SE 1.4.2版本编译的实现将没有该方法,并且当调用setFeature(String, boolean)
时会发生此错误在他们。
您可能在类路径上有一个旧的XML库,它返回了DocumetnBuilderFactory.newInstance()
的实例。 问题可能不在于JOGL本身,它可能只是JOGL将旧的XML库作为依赖项引入。
您需要转到WWXML类并替换:
docBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
有:
docBuilderFactory.setNamespaceAware(true);
java上的完整方法是:
public static DocumentBuilder createDocumentBuilder(boolean isNamespaceAware) { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); docBuilderFactory.setNamespaceAware(isNamespaceAware); if (Configuration.getJavaVersion() >= 1.6) { docBuilderFactory.setNamespaceAware(true); } try { return docBuilderFactory.newDocumentBuilder(); } catch (ParserConfigurationException e) { String message = Logging.getMessage("XML.ParserConfigurationException"); Logging.logger().finest(message); throw new WWRuntimeException(e); } }
- 使用HQL的新对象 – StandardAnsiSqlAggregationFunctions上的NPE,确定JdbcTypeCode
- 您如何测试针对AWS API编写的代码
- 尽管使用了@Primary,但两个具有相同名称的bean会导致ConflictingBeanDefinitionException
- ClassLoader.getResources在Weblogic / Spring应用程序上返回一个空的Enumeration
- RequestDispatcher是否在一个servlet容器中处理多个webapps?
- 如何声明i和j使其成为无限循环?
- Java如何在其16位字符类型中存储UTF-16字符?
- 要汇集还是不汇集java加密服务提供商
- 任何符合IEEE754(r)标准的Java实现?