在我的应用程序中,我在看似随机的地点和时间收到“IllegalAccess”错误。唯一的共同点是堆栈跟踪:
java.lang.IllegalAccessError: class sun.reflect.GeneratedConstructorAccessor3 cannot access its superclass sun.reflect.ConstructorAccessorImpl
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:394)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:393)
at sun.reflect.MethodAccessorGenerator.generateConstructor(MethodAccessorGenerator.java:92)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:55)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
**at com.codename1.ui.Form.initLaf(Form.java:969)**
at com.codename1.ui.Dialog.initLaf(Dialog.java:499)
at com.codename1.ui.Component.<init>(Component.java:687)
at com.codename1.ui.Container.<init>(Container.java:187)
at com.codename1.ui.Container.<init>(Container.java:199)
at com.codename1.ui.Form.<init>(Form.java:181)
at com.codename1.ui.Form.<init>(Form.java:172)
at com.codename1.ui.Dialog.<init>(Dialog.java:288)
at com.codename1.ui.Dialog.<init>(Dialog.java:275)
at com.codename1.ui.Dialog.<init>(Dialog.java:248)
at com.codename1.ui.Dialog.show(Dialog.java:994)
at com.codename1.ui.Dialog.show(Dialog.java:793)
at com.codename1.ui.Dialog.show(Dialog.java:746)
at com.codename1.ui.Dialog.show(Dialog.java:711)
at com.codename1.ui.Dialog.show(Dialog.java:652)
at com.codename1.ui.Dialog.show(Dialog.java:807)
at com.codename1.ui.Display.mainEDTLoop(Display.java:983)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
标有 ** .. ** 的行是我的注释,因为这是引发错误的Form类的方法。无论是当我打开一个新表单、一个对话框(从 Form 继承)还是任何涉及创建新表单的东西时,都会随机出现这个问题。
我不知道如何调试它,因为似乎不是我的代码导致了这个问题。
调试甚至解决问题的任何提示?
编辑
该错误不仅限于创建表单,还可能在内部化对象时发生。请参阅堆栈跟踪:
<same as above stacktrace after Class.newinstance>
at java.lang.Class.newInstance(Class.java:442)
at com.codename1.io.Util.readObject(Util.java:690)
at com.codename1.io.Util.readObject(Util.java:668)
at com.lequi.ep.dtos.ChatDTO.internalize(ChatDTO.java:47)
at com.codename1.io.Util.readObject(Util.java:693)
编辑 2
通过对这个问题进行更多测试,到目前为止,我发现了一个模式。无论我创建哪种表单或对话框,都取决于我实例化它们的次数。在第 13 次我想实例化一个表单时(无论哪个屏幕),都会弹出这个错误。我不需要做任何事情,只需打开屏幕并返回即可。可以复制错误的相关代码被剪断:
// main form activity
<omitted for brevity>
chatButton.addActionListener(e -> {
new ChatScreen(this).show();
});
public ChatScreen(Form origin) {
super("Chat", new BorderLayout());
setUIID("ChatHistory");
getToolbar().setBackCommand("", e -> {
origin.showBack();
});
<omitted for brevity>
}