要回答我的问题,甚至认为我高度怀疑这是一个常见问题......
事实证明,这个问题毕竟与安全无关。问题的起源是因为第三个奇偶校验库的一个非常难以理解的行为 - 每当调用有问题的方法时,即使在一个单独的线程中,在主线程中它们也是一个等待答案的循环 - 异常是抛出。
因此,以下代码失败,但是当最后的睡眠行被删除时,它可以正常工作。无论代码在哪里,init()或从JavaScript调用的方法都会发生这种情况 - 行为是相同的。
new Thread(new Runnable() { public void run() { AccessController.doPrivileged(new PrivilegedAction<String>() { public String run() { callTheMehod(); } }); } }).start(); try { Thread.sleep(5000); } catch (exce....) {}
我最终将代码拆分为两个从JavaScript调用的方法 - 一个调用库方法,将结果放在一个易变的String中,另一个只返回这个易变的String。在JavaScript中,它们是两者之间的等待循环。奇怪的是,如果此循环的间隔非常短 - 并且检查结果的方法过于频繁地调用,则库方法再次失败。
因此,只要主线程上有太多负载,就会抛出异常。这对我来说是莫名其妙的,但是由于库正在使用JNI,我猜很多都可能出错。