繁体   English   中英

在同步块java / android中抛出异常

[英]Exception thrown inside a synchronized block java/android

对于同步块,我遇到了一些奇怪的事情。 我有一个缓存,该缓存需要位于同步块内。 块内发生异常,由于某种原因,该异常不会进入catch块。 我尝试调试它,然后看到它调用了InvocationTargetException构造函数,然后转到ThreadGroup uncaughtException(Thread t,Throwable e)方法。

我在同步块周围有一个try catch,实际上还有另一个内部try-catch覆盖了发生异常的代码行...

有谁知道为什么它没有把它送到捕获块?

我什至尝试从字面上尝试捕获InvocationTargetException和Exception,并且按预期的那样,它不会编译,因为里面没有东西抛出这种异常。 我确实了解异常的原因,但我担心的是该异常未被捕获并杀死了线程。

@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)

也许没有捕获到异常,因为它是Error而不是Exception

出于调试目的:尝试将“ catch Exception”更改为“ catch Throwable”,您将获得有关问题的更多信息。

有关可能的解决方案:请参阅您帖子的评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM