代码之家  ›  专栏  ›  技术社区  ›  Jono

java.lang.verifyerror验证错误

  •  2
  • Jono  · 技术社区  · 14 年前

    我正在开发一个android项目,它使用的类和方法来自我正在创建的一个单独的jar文件,问题在于一个名为 XpathUtil 那是在扔一个 VerifyError 每次我尝试调用它的一个静态方法。

    下面是我的xpathutil类的外观:

    public class XpathUtil {
    
     private static XPath xpath = XPathFactory.newInstance().newXPath();
     private static String TAG = "XpathUtil";
    
     public static Document createXpathDocument(String xml) {
      try {
    
       Log.d(TAG , "about to create document builder factory");
       DocumentBuilderFactory docFactory = DocumentBuilderFactory
         .newInstance();
       Log.d(TAG , "about to create document builder ");
       DocumentBuilder builder = docFactory.newDocumentBuilder();
    
       Log.d(TAG , "about to create document with parsing the xml string which is: ");
    
       Log.d(TAG ,xml );
       Document document = builder.parse(new InputSource(
         new StringReader(xml)));
    
       Log.d(TAG , "If i see this message then everythings fine ");
    
       return document;
      } catch (Exception e) {
       e.printStackTrace();
       Log.d(TAG , "EXCEPTION OCCURED HERE " + e.toString());
       return null;
      }
     }
    
     public static NodeList getNodeList(Document doc, String expr) {
      try {
       Log.d(TAG , "inside getNodeList");
       XPathExpression pathExpr = xpath.compile(expr);
       return (NodeList) pathExpr.evaluate(doc, XPathConstants.NODESET);
      } catch (XPathExpressionException e) {
       e.printStackTrace();
      }
      return null;
     }
    
     // extracts the String value for the given expression
     public static String getNodeValue(Node n, String expr) {
      try {
       Log.d(TAG , "inside getNodeValue");
       XPathExpression pathExpr = xpath.compile(expr);
       return (String) pathExpr.evaluate(n, XPathConstants.STRING);
      } catch (XPathExpressionException e) {
       e.printStackTrace();
      }
      return null;
     }
    }
    

    这正是我正在处理的主项目发生异常的地方:

    mDocument = XpathUtil.createXpathDocument(xml);
    

    如你所见,我所做的只是简单的打电话 createXpathDocument 它位于一个单独的jar文件中,该文件已成功导入并通过eclipse包含在我的构建路径中(我对这个jar中的不同类进行的任何其他调用都可以正常工作)。所以我不太确定问题是什么。

    我尝试在主项目和我正在使用的另一个项目上进行清理和构建,然后将其导出到实际的jar文件中,供第三方应用程序使用,但由于某种奇怪的原因,这个xpathutil不起作用。

    编辑:以下是例外情况:

    Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception
    java.lang.RuntimeException: An error occured while executing doInBackground()
       at 
    
    android.os.AsyncTask$3.done(AsyncTask.java:200)
       at 
    
    java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)   at 
    
    java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at 
    
    java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
       at 
    
    java.util.concurrent.FutureTask.run(FutureTask.java:137) at 
    
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
     at 
    
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
      at 
    
    java.lang.Thread.run(Thread.java:1096)
     Caused by: java.lang.VerifyError: 
    
    com.kc.unity.agent.util.xml.XpathUtil    at com.kc.unity.agent.util.xml.ContactDescHelper.<init>
    
    (ContactDescHelper.java:67)
       at 
    
    com.kc.unity.agent.federation.contacts.ContactPlatformWrapper.constructContactDetails
    
    (ContactPlatformWrapper.java:218)
      at 
    
    com.kc.unity.agent.federation.contacts.ContactPlatformWrapper.getContactDetails
    
    (ContactPlatformWrapper.java:101)    at 
    
    com.kc.unified.contacts.ContactDetails.setContactFields(ContactDetails.java:154)   at com.kc.unified.contacts.ContactDetails.access$6
    
    (ContactDetails.java:150)   at 
    
    com.kc.unified.contacts.ContactDetails$LoadScreen.doInBackground(ContactDetails.java:79)
      at 
    
    com.kc.unified.contacts.ContactDetails$LoadScreen.doInBackground(ContactDetails.java:1)
       at android.os.AsyncTask$2.call(AsyncTask.java:185)   at 
    
    java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)... 4 more
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Andreas Dolk    14 年前

    导致verifyerrors的典型场景是:库有两个不同的版本,分别针对版本1编译和使用版本2运行。在这种情况下,特别是当方法签名发生更改时,jvm可能会抱怨 VerifyError 是的。

    所以对于你的情况:仔细检查你是否使用了相同的 XPathUtil.class 用于构建和执行的文件。可能jvm在类路径上有这个类的旧版本(可能它甚至有多个版本,并且选择了错误的版本)。

        2
  •  2
  •   Jay Parker    12 年前

    当我将ADT工具更新到版本18.0.0.V201203301601-306762时 我在运行应用程序时也会遇到异常… 最后我找到了ADT更新问题的解决方案。 当您构建android应用程序项目时,需要转到project 属性->订购和导出 ,并选中第三方jar复选框,然后清理并重建项目。 问题会得到解决…… for example let the third party jar checkbox to be checked