в моем приложении я получаю ошибки «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 , который выдаетошибка.Когда я открываю новую форму, диалоговое окно (которое наследуется от формы) или просто все, что связано с созданием новой формы, эта проблема возникает случайным образом.
Я понятия не имею, как отладить это, так каккажется, что это не мой код, который вызывает проблему.
Какие-либо советы по отладке или даже решению проблемы?
РЕДАКТИРОВАТЬ
ошибкане только ограничивается созданием форм, но также может происходить при интернализации объектов.Смотрите трассировку стека:
<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>
}