首页 文章

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

提问于
浏览
0

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

我有一个try catch围绕synchronized块,事实上还有另一个内部try-catch覆盖了异常发生的代码行...

有谁知道为什么它没有到达catch块?

我甚至试图尝试捕获InvocationTargetException以及Exception,并且正如预期的那样,它不会编译,因为内部没有任何东西抛出这种异常 . 我确实理解异常的原因,但我担心的是它没有被 grab 并杀死线程 .

@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());
            }
    }
}

这是设备位置更改时触发的事件

这是我从log cat获得的,没有捕获异常

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)

1 回答

  • 0

    也许异常不是't caught because it'是 Error 而不是 Exception .

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

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

相关问题