Seeing that addItem is synchronised I imagined it will be thread-safe to add items from different thread, but I got exception soon enough.
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.googlecode.lanterna.gui2.AbstractListBox$DefaultListBoxRenderer.getPreferredSize(AbstractListBox.java:245)
at com.googlecode.lanterna.gui2.AbstractListBox$DefaultListBoxRenderer.getPreferredSize(AbstractListBox.java:209)
at com.googlecode.lanterna.gui2.AbstractComponent.calculatePreferredSize(AbstractComponent.java:128)
at com.googlecode.lanterna.gui2.AbstractComponent.getPreferredSize(AbstractComponent.java:117)
at com.googlecode.lanterna.gui2.LinearLayout.getPreferredSizeVertically(LinearLayout.java:87)
at com.googlecode.lanterna.gui2.LinearLayout.getPreferredSize(LinearLayout.java:76)
at com.googlecode.lanterna.gui2.Panel$1.getPreferredSize(Panel.java:110)
at com.googlecode.lanterna.gui2.Panel$1.getPreferredSize(Panel.java:106)
at com.googlecode.lanterna.gui2.AbstractComponent.calculatePreferredSize(AbstractComponent.java:128)
at com.googlecode.lanterna.gui2.Panel.calculatePreferredSize(Panel.java:132)
at com.googlecode.lanterna.gui2.AbstractComponent.getPreferredSize(AbstractComponent.java:117)
at com.googlecode.lanterna.gui2.AbstractBasePane$ContentHolder$1.getPreferredSize(AbstractBasePane.java:238)
at com.googlecode.lanterna.gui2.AbstractBasePane$ContentHolder$1.getPreferredSize(AbstractBasePane.java:231)
at com.googlecode.lanterna.gui2.AbstractComponent.calculatePreferredSize(AbstractComponent.java:128)
at com.googlecode.lanterna.gui2.AbstractComponent.getPreferredSize(AbstractComponent.java:117)
at com.googlecode.lanterna.gui2.AbstractWindow.getPreferredSize(AbstractWindow.java:114)
at com.googlecode.lanterna.gui2.MultiWindowTextGUI.updateScreen(MultiWindowTextGUI.java:141)
at com.googlecode.lanterna.gui2.AbstractTextGUIThread.processEventsAndUpdate(AbstractTextGUIThread.java:61)
at com.googlecode.lanterna.gui2.MultiWindowTextGUI.waitForWindowToClose(MultiWindowTextGUI.java:275)
at com.googlecode.lanterna.gui2.AbstractWindow.waitUntilClosed(AbstractWindow.java:164)
at com.googlecode.lanterna.gui2.MultiWindowTextGUI.addWindowAndWait(MultiWindowTextGUI.java:252)
at com.github.dant3.catlog.Main$$anonfun$main$1.apply(Main.scala:9)
at com.github.dant3.catlog.Main$$anonfun$main$1.apply(Main.scala:7)
at com.github.dant3.catlog.GUI$.run(GUI.scala:21)
at com.github.dant3.catlog.Main$.main(Main.scala:7)
at com.github.dant3.catlog.Main.main(Main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
I suppose I should always add items to display in gui component on gui thread, but then synchronised appears to be unneeded overhead I can’t get rid of currently.
> --
> Det här meddelandet skickas till dig eftersom du prenumererar på gruppen "lanterna-discuss" i Google Grupper.
> Om du vill sluta prenumerera på den här gruppen och inte längre få någon e-post från den skickar du ett e-postmeddelande till
lanterna-discu...@googlegroups.com.
> Fler alternativ finns på
https://groups.google.com/d/optout.
Regards,
Vyacheslav Blinov
https://github.com/dant3