【发布时间】:2014-04-22 21:38:56
【问题描述】:
我在同步块方面遇到了一些奇怪的事情。我有一个需要在同步块内的缓存。块内部发生异常,由于某种原因不会进入 catch 块。我尝试调试它,我看到它调用了 InvocationTargetException 构造函数,然后它转到了 ThreadGroup uncaughtException(Thread t, Throwable e) 方法。
我在同步块周围有一个 try-catch,实际上还有另一个内部 try-catch 覆盖了发生异常的代码行...
有谁知道为什么它没有到达 catch 块?
我什至尝试从字面上尝试捕获 InvocationTargetException 以及异常,但正如预期的那样,它无法编译,因为内部没有任何东西抛出这种异常。我确实理解异常的原因,但我担心它没有被捕获并杀死线程。
@Override
public void onLocationChanged(Location loc)
{
if(lastKnownLatitude != null && lastKnownLongitude != null)
{
try
{
synchronized (dataManager.getRegisteredGeo()) {for(String geoName : dataManager.getRegisteredGeo().keySet())
{
GeoNotification geoNotification = dataManager.getRegisteredGeo().get(geoName);
boolean isInside = geoNotification.isLocationInsideFence(loc.getLatitude(), loc.getLongitude());
geoNotification.setLastKnownDeviceInside(isInside);
GeoUpdateMsg updateMsg = new GeoUpdateMsg(geoNotification.getTransactionId());
updateMsg.sendData(updateMsg.serializeObjectIntoXml());
}
}
}
catch(Exception e)
{
Logger.LogError("Exception while processing geo notifications" + e.getMessage());
}
}
}
这是在设备位置更改时触发的事件
这是我从日志猫那里得到的,异常没有被捕获
04-22 13:12:35.762: E/AndroidRuntime(2121): FATAL EXCEPTION: main
04-22 13:12:35.762: E/AndroidRuntime(2121): java.lang.NoClassDefFoundError: org/joda/convert/FromString
04-22 13:12:35.762: E/AndroidRuntime(2121): at java.lang.reflect.Method.getDeclaredAnnotations(Native Method)
04-22 13:12:35.762: E/AndroidRuntime(2121): at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:267)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.MethodDetail.<init>(MethodDetail.java:57)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.DetailScanner.methods(DetailScanner.java:411)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.DetailScanner.scan(DetailScanner.java:366)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.DetailScanner.<init>(DetailScanner.java:140)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.DetailExtractor.getDetail(DetailExtractor.java:107)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Support.getDetail(Support.java:278)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Support.getDetail(Support.java:271)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.ScannerFactory.getInstance(ScannerFactory.java:76)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Support.getScanner(Support.java:357)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Source.getScanner(Source.java:271)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Source.getCaller(Source.java:300)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Composite.writeReplace(Composite.java:1147)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Composite.writeUnion(Composite.java:1124)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Composite.writeElements(Composite.java:1098)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Composite.writeSection(Composite.java:1004)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Composite.write(Composite.java:975)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Composite.write(Composite.java:952)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Traverser.write(Traverser.java:236)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Traverser.write(Traverser.java:208)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Traverser.write(Traverser.java:186)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Persister.write(Persister.java:1180)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Persister.write(Persister.java:1162)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Persister.write(Persister.java:1140)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Persister.write(Persister.java:1259)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Persister.write(Persister.java:1241)
04-22 13:12:35.762: E/AndroidRuntime(2121): at org.simpleframework.xml.core.Persister.write(Persister.java:1222)
04-22 13:12:35.762: E/AndroidRuntime(2121): at com.medusa.client.transactions.TransactionsGoingOut.serializeObjectIntoXml(TransactionsGoingOut.java:57)
04-22 13:12:35.762: E/AndroidRuntime(2121): at com.medusa.client.transactions.messages.GeoFenceUpdateMsg.serializeObjectIntoXml(GeoFenceUpdateMsg.java:64)
04-22 13:12:35.762: E/AndroidRuntime(2121): at com.medusa.client.smsIntercept.GPSTracker.onLocationChanged(GPSTracker.java:312)
04-22 13:12:35.762: E/AndroidRuntime(2121): at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:255)
04-22 13:12:35.762: E/AndroidRuntime(2121): at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:184)
04-22 13:12:35.762: E/AndroidRuntime(2121): at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:200)
04-22 13:12:35.762: E/AndroidRuntime(2121): at android.os.Handler.dispatchMessage(Handler.java:99)
04-22 13:12:35.762: E/AndroidRuntime(2121): at android.os.Looper.loop(Looper.java:137)
04-22 13:12:35.762: E/AndroidRuntime(2121): at android.app.ActivityThread.main(ActivityThread.java:5041)
04-22 13:12:35.762: E/AndroidRuntime(2121): at java.lang.reflect.Method.invokeNative(Native Method)
04-22 13:12:35.762: E/AndroidRuntime(2121): at java.lang.reflect.Method.invoke(Method.java:511)
04-22 13:12:35.762: E/AndroidRuntime(2121): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-22 13:12:35.762: E/AndroidRuntime(2121): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-22 13:12:35.762: E/AndroidRuntime(2121): at dalvik.system.NativeStart.main(Native Method)
04-22 13:12:35.762: E/AndroidRuntime(2121): Caused by: java.lang.ClassNotFoundException: Didn't find class "org.joda.convert.FromString" on path: /data/app/com.nomotion.smsIntercept-1.apk
04-22 13:12:35.762: E/AndroidRuntime(2121): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
04-22 13:12:35.762: E/AndroidRuntime(2121): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
04-22 13:12:35.762: E/AndroidRuntime(2121): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
【问题讨论】:
-
在这里发布你的代码!!
-
你能显示错误的堆栈跟踪吗?
-
我怀疑
Exception没有在您显示的try句子中抛出,但堆栈跟踪会澄清这一点。 -
只是这个类不被识别
org.joda.convert.FromString确保你正确集成你的库或者你没有多次引用同一个库 -
是的。我的意思是我理解这个问题,但它应该已经被抓住了......