Error handling Codename one-Form.initLaf抛出随机;非法进入“;错误

Error handling Codename one-Form.initLaf抛出随机;非法进入“;错误,error-handling,codenameone,illegalaccessexception,Error Handling,Codenameone,Illegalaccessexception,在我的应用程序中,我会在看似随机的地点和时间出现“IllegaAccess”错误。 唯一的共同点是堆栈跟踪: java.lang.IllegalAccessError: class sun.reflect.GeneratedConstructorAccessor3 cannot access its superclass sun.reflect.ConstructorAccessorImpl at sun.misc.Unsafe.defineClass(Native Method) at sun

在我的应用程序中,我会在看似随机的地点和时间出现“IllegaAccess”错误。 唯一的共同点是堆栈跟踪:

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)
java.lang.IllegalAccessError:class sun.reflect.GeneratedConstructorAccessor3无法访问其超类sun.reflect.ConstructorAccessorImpl
在sun.misc.Unsafe.defineClass(本机方法)
在sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
在sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
在sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:394)
位于java.security.AccessController.doPrivileged(本机方法)
在sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:393)中
在sun.reflect.MethodAccessorGenerator.generateConstructor(MethodAccessorGenerator.java:92)中
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:55)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
位于java.lang.Class.newInstance(Class.java:442)
**位于com.codename1.ui.Form.initLaf(Form.java:969)**
位于com.codename1.ui.Dialog.initLaf(Dialog.java:499)
com.codename1.ui.Component.(Component.java:687)
位于com.codename1.ui.Container(Container.java:187)
位于com.codename1.ui.Container(Container.java:199)
在com.codename1.ui.Form.(Form.java:181)
在com.codename1.ui.Form.(Form.java:172)
在com.codename1.ui.Dialog.(Dialog.java:288)
在com.codename1.ui.Dialog.(Dialog.java:275)
在com.codename1.ui.Dialog.(Dialog.java:248)
位于com.codename1.ui.Dialog.show(Dialog.java:994)
在com.codename1.ui.Dialog.show(Dialog.java:793)
在com.codename1.ui.Dialog.show(Dialog.java:746)
在com.codename1.ui.Dialog.show(Dialog.java:711)
在com.codename1.ui.Dialog.show(Dialog.java:652)
在com.codename1.ui.Dialog.show(Dialog.java:807)
位于com.codename1.ui.Display.mainEDTLoop(Display.java:983)
位于com.codename1.ui.runnablerrapper.run(runnablerrapper.java:120)
位于com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
标有**..**的行是我的注释,因为这是引发错误的Form类的方法。 当我打开一个新表单、一个对话框(从表单继承)或者任何涉及创建新表单的内容时,这个问题都会随机发生

我不知道如何调试这个,因为似乎不是我的代码导致了这个问题

有没有调试甚至解决问题的技巧

编辑

错误不仅限于创建表单,而且在内部化对象时也可能发生。请参阅stacktrace:

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

位于java.lang.Class.newInstance(Class.java:442)
位于com.codename1.io.Util.readObject(Util.java:690)
位于com.codename1.io.Util.readObject(Util.java:668)
位于com.lequi.ep.dtos.ChatDTO.internalize(ChatDTO.java:47)
位于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>
 }
//主窗体活动
chatButton.addActionListener(e->{
新建聊天室屏幕(this.show();
});
公共聊天屏幕(表单来源){
超级(“聊天”,新边框布局());
setUIID(“聊天记录”);
getToolbar().setBackCommand(“,e->{
origin.showBack();
});
}

在设置第二个开发环境后,将我的git项目一对一导入,没有任何问题,并且注意到此错误不会发生在移动设备本身上,此问题可能仅限于我的特定环境


我仍然不知道为什么会发生这种情况,但影响是可以忽略的。

之所以会发生这种情况,是因为您在代码中没有足够早地调用
Util.register()
。请注意,在
init(Object)
回调之前不应该这样做

但是,如果在调用之前读取/写入对象(例如,作为静态初始值设定项的结果),则会产生类似的异常

其他潜在问题包括返回
getClass().getName()
而不是硬编码字符串的代码。由于混淆,这可能会严重失败。第一步是查看ChatDTO的第47行。在那一行读到的是什么,为什么

还有谁在com.codename1.io.Util.readObject(Util.java:693)上调用
,何时调用


对象无法读取自身。

您能为此问题提供一个测试用例吗?您是否使用了类似于
LookAndFeel.setMenuBarClass
的API?该API本应被弃用和删除Francesco,不幸的是,我无法重现该问题,而且我还没有发现任何导致此错误的模式。谢,我不使用任何API或其他专业。我只是使用CN1网络服务,通过Hibernate连接到Postgres,如果这有助于缩小范围的话。我刚才发现的更多信息添加在上面的帖子中。有可能的更新吗?到目前为止,我无法部署这个CN1应用程序,因为它在切换屏幕13次后崩溃。那可能是一分钟左右,麦克斯