java.lang.VerifyError的
我正在开发一个Android项目,该项目使用我正在创建的单独JAR文件中的类和方法,问题在于每次尝试调用其静态方法时都会使用名为XpathUtil
的特定util类抛出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; } }
这是我正在使用的主项目发生exception的确切行:
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. (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
导致VerifyErrors的典型场景:您有两个不同版本的库,针对版本1进行编译并使用版本2运行。在这种情况下,特别是如果方法签名已更改,JVM可能会抱怨VerifyError
。
因此,对于您的情况:仔细检查您是否使用完全相同的XPathUtil.class
文件来构建和执行。 也许JVM在类路径上有这个类的旧版本(可能它有多个版本并选择了错误的版本)。
当我更新ADT工具到版本18.0.0.v201203301601-306762我运行应用程序时也得到exception….最后我找到了解决adt更新问题。 当您构建Android应用程序项目时,您需要转到项目属性 – >订单和导出 ,并选中第三方jar复选框,并清理并重建项目。 例如,问题将得到修复……
- 如何在Android中以编程方式检查蓝牙网络共享状态
- 在`Service`类中运行新的`runnableThread`时出现java.lang.ClassCastException
- Realm.io notifications – 如何只监听某些表中的更改?
- 查找Galaxy Tab 10.1的IP地址以供应用
- 安装了最新的JDK 1.8.0,但我的Javac -version仍然显示旧版本(Windows 7 – 64)
- 使用“exec”频道进行JSch SCP文件传输
- java中的DateFormat转换问题?
- 在RecyclerView.Adapter中单击传递数据
- 如何在andengine中添加用于移动精灵的路径