JavaFX java.lang.ArrayIndexOutOfBoundsException: -1, java.util.ConcurrentModificationException решение?

314
14 февраля 2017, 18:29

Всем привет,

разрабатываю маленькую программу клиент для визуализации и записывания показании датчиков температуры и влажности с arduino + DHT22. Сделал GUI - с использованием JavaFX. Но столкнулся с проблемой, время от времени при записи показании более одного часа могут возникнуть JavaFX исключения, в Java я новичек, погуглил что может быть ошибка в использовании одного и того же объекта из разных потоков НО у меня один поток на запись и отрисовку. Записываю данные в XLS (Excel) с помощью Apache POI. Прикладываю весь листинг программы, а так же лог исключении. Кто может подсказать в какую сторону копать? На каком этапе вылезают исключения не могу найти так как программа работает несколько часов и в любой момент вылетает Exception.

Сам проект на гите + сорсы: https://github.com/mozomig/Java-GUI-Serial-port-Arduino

Exception LOG:

Exception in thread "JavaFX Application Thread" java.util.ConcurrentModificationException 
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:386) 
at java.util.AbstractList$Itr.next(AbstractList.java:355) 
at com.sun.javafx.scene.shape.PathUtils.configShape(PathUtils.java:45) 
at javafx.scene.shape.Path.impl_configShape(Path.java:251) 
at javafx.scene.shape.Path.impl_configShape(Path.java:89) 
at javafx.scene.shape.Shape.impl_computeGeomBounds(Shape.java:864) 
at javafx.scene.Node.updateGeomBounds(Node.java:3577) 
at javafx.scene.Node.getGeomBounds(Node.java:3530) 
at javafx.scene.Node.getLocalBounds(Node.java:3478) 
at javafx.scene.Node.updateTxBounds(Node.java:3641) 
at javafx.scene.Node.getTransformedBounds(Node.java:3424) 
at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1732) 
at javafx.scene.Parent.recomputeBounds(Parent.java:1524) 
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) 
at javafx.scene.Node.updateGeomBounds(Node.java:3577) 
at javafx.scene.Node.getGeomBounds(Node.java:3530) 
at javafx.scene.Node.getLocalBounds(Node.java:3478) 
at javafx.scene.Node.updateTxBounds(Node.java:3641) 
at javafx.scene.Node.getTransformedBounds(Node.java:3424) 
at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1732) 
at javafx.scene.Parent.updateCachedBounds(Parent.java:1596) 
at javafx.scene.Parent.recomputeBounds(Parent.java:1535) 
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) 
at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078) 
at javafx.scene.Node.updateGeomBounds(Node.java:3577) 
at javafx.scene.Node.getGeomBounds(Node.java:3530) 
at javafx.scene.Node.computeLocalBounds(Node.java:3593) 
at javafx.scene.Node.updateLocalBounds(Node.java:3623) 
at javafx.scene.Node.getLocalBounds(Node.java:3484) 
at javafx.scene.Node.updateTxBounds(Node.java:3641) 
at javafx.scene.Node.getTransformedBounds(Node.java:3424) 
at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1732) 
at javafx.scene.Parent.recomputeBounds(Parent.java:1524) 
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) 
at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078) 
at javafx.scene.Node.updateGeomBounds(Node.java:3577) 
at javafx.scene.Node.getGeomBounds(Node.java:3530) 
at javafx.scene.Node.getLocalBounds(Node.java:3478) 
at javafx.scene.Node.updateTxBounds(Node.java:3641) 
at javafx.scene.Node.getTransformedBounds(Node.java:3424) 
at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1732) 
at javafx.scene.Parent.updateCachedBounds(Parent.java:1596) 
at javafx.scene.Parent.recomputeBounds(Parent.java:1535) 
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) 
at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078) 
at javafx.scene.Node.updateGeomBounds(Node.java:3577) 
at javafx.scene.Node.getGeomBounds(Node.java:3530) 
at javafx.scene.Node.getLocalBounds(Node.java:3478) 
at javafx.scene.Node.updateTxBounds(Node.java:3641) 
at javafx.scene.Node.getTransformedBounds(Node.java:3424) 
at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1732) 
at javafx.scene.Parent.recomputeBounds(Parent.java:1524) 
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) 
at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078) 
at javafx.scene.Node.updateGeomBounds(Node.java:3577) 
at javafx.scene.Node.getGeomBounds(Node.java:3530) 
at javafx.scene.Node.getLocalBounds(Node.java:3478) 
at javafx.scene.Node.impl_intersectsBounds(Node.java:5013) 
at javafx.scene.layout.Region.impl_pickNodeLocal(Region.java:2931) 
at javafx.scene.Node.impl_pickNode(Node.java:4912) 
at javafx.scene.Scene$MouseHandler.pickNode(Scene.java:3899) 
at javafx.scene.Scene$MouseHandler.access$1600(Scene.java:3485) 
at javafx.scene.Scene.pick(Scene.java:1942) 
at javafx.scene.Scene.access$6700(Scene.java:159) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3711) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene$MouseHandler$1.run(Scene.java:3521) 
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
Exception in thread "JavaFX Application Thread" java.lang.ArrayIndexOutOfBoundsException: -1 
at java.util.ArrayList.elementData(ArrayList.java:418) 
at java.util.ArrayList.get(ArrayList.java:431) 
at javafx.scene.Parent.updateCachedBounds(Parent.java:1591) 
at javafx.scene.Parent.recomputeBounds(Parent.java:1535) 
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) 
at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078) 
at javafx.scene.Node.updateGeomBounds(Node.java:3577) 
at javafx.scene.Node.getGeomBounds(Node.java:3530) 
at javafx.scene.Node.getLocalBounds(Node.java:3478) 
at javafx.scene.Node.updateTxBounds(Node.java:3641) 
at javafx.scene.Node.getTransformedBounds(Node.java:3424) 
at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1732) 
at javafx.scene.Parent.recomputeBounds(Parent.java:1524) 
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) 
at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078) 
at javafx.scene.Node.updateGeomBounds(Node.java:3577) 
at javafx.scene.Node.getGeomBounds(Node.java:3530) 
at javafx.scene.Node.getLocalBounds(Node.java:3478) 
at javafx.scene.Node.impl_intersectsBounds(Node.java:5013) 
at javafx.scene.layout.Region.impl_pickNodeLocal(Region.java:2931) 
at javafx.scene.Node.impl_pickNode(Node.java:4912) 
at javafx.scene.Scene$MouseHandler.pickNode(Scene.java:3899) 
at javafx.scene.Scene$MouseHandler.access$1600(Scene.java:3485) 
at javafx.scene.Scene.pick(Scene.java:1942) 
at javafx.scene.Scene.access$6700(Scene.java:159) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3711) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene$MouseHandler$1.run(Scene.java:3521) 
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
Exception in thread "JavaFX Application Thread" java.lang.ArrayIndexOutOfBoundsException

READ ALSO
Вычитывание файла с применением Singleton

Вычитывание файла с применением Singleton

Задача вычитать из конфига ключ и при необходимости использовать ключ из памяти, а не постоянно вычитывать и тратить ресурсы

299
Проблемы с коннектором java tarantool

Проблемы с коннектором java tarantool

Пытался сделать java коннектор к тарантул 172 в NetBeans, делал по мануалу с connector java for tarantool,при запуске, программа ссылается на отсутствие главного...

383
Cursor и выборка значений

Cursor и выборка значений

Продолжаю рубрику безответных вопросов на Stack overflow

285