Javada bir programda bir exception oluşuyor ama sanırım bir thread üzerinde. Bu yüzden kodlarımda hangi satırda gerçekleştiği yazmıyor. Bunu hata mesajından nasıl anlayabilirim? Hata mesajının tamamı aşağıda:

java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:394)
at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:405)
at javafx.scene.Parent.recomputeBounds(Parent.java:1526)
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1275)
at javafx.scene.Node.updateGeomBounds(Node.java:3142)
at javafx.scene.Node.getGeomBounds(Node.java:3102)
at javafx.scene.Node.impl_updatePG(Node.java:456)
at javafx.scene.Parent.impl_updatePG(Parent.java:107)
at javafx.scene.Node.impl_syncPGNode(Node.java:425)
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Scene.java:2109)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2210)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:363)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:460)
at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:329)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
at java.lang.Thread.run(Thread.java:722)

soruldu: 03 Tem '13, 03:51

numankaraaslan's gravatar image

numankaraaslan
1.8k253749
cevap kabul oranı: 19%


Hatanin ciktigi yer belli.

java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:394)
at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:405)
at javafx.scene.Parent.recomputeBounds(Parent.java:1526)

Hata javafx.scene.Parent.recomputeBounds(Parent.java:1526) kaynaklaniyor.
Bu bir Bug ola bilir. Arastirmak lazim.

Ikinci örnekte ise:

java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
at java.util.ArrayList$Itr.next(ArrayList.java:791)
at de.test.FooTest.shouldtestName(FooTest.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

Trace eksik kopyalanmis. O yüzden hatanin nerden geldigi görülmüyor olmuyor.

Selamlar

permanent link

cevaplandı: 05 Tem '13, 04:14

mahmut_can's gravatar image

mahmut_can ♦
2.9k62552
cevap kabul oranı: 67%

Aslında Timer kullanıyorum tick olduğunda bir işlemyapıyor buyük ihtimalle o sırada çalışan başka bir işlemle çakışıyor. Ama Trace de yazan hatanın tamamı bu şekilde başka hiç birşey yazmıyor. Ben de bu yüzden thread kullanan uygulamalarda bir sorun çıkarsa muhtemelen böyle bir exception mesajı yazacak nerede sorun çıktığı bilinmeyecek. Bu yüzden sordum bu şekilde bir hata mesajı aldığımızda nasıl yaklaşabiliriz diye.

(05 Tem '13, 07:12) numankaraaslan numankaraaslan's gravatar image

Metodlarda Logger kullanırsan en son hangi metoda girmiş nerde çakılmış görebilirsin.

permanent link

cevaplandı: 03 Tem '13, 05:02

Ekici's gravatar image

Ekici
12691217
cevap kabul oranı: 25%

logger iyi bir çözüm olur. ama bence hangi metodu multithread olarak çalıştırdıysan orayı incelesen iyi olur. muhtemelen synchronized koyman lazım biryerlere

(04 Tem '13, 08:42) kodmanyagha kodmanyagha's gravatar image

İki yorum için de teşekkürler. Ama sorun nerde olduğunu tahmin etmek değil de bu hata mesajından ne kadarını anlayabilirim? Hangi metod içinde olmuştur hata en azından bunu bilebilir miyim?

(05 Tem '13, 07:16) numankaraaslan numankaraaslan's gravatar image

kimi zaman gelen hata mesajları hangi metodun neresinden hata oluştuğunu söyleyemez, çünki hatanın oluştuğu yer o metodlarda değil, o metodların eriştiği framework elemanlarındadır. (burada parent.java). Belliki parent.java'ya tasarlanmadığı bir yöntemde erişmeye çalışan bir metodun var. Hata mesajları bu gibi durumlarda bize sadece bir ipucu verir. yapılacak en mantıklı yol diğer arkadaşların dediği gibi logger kullanmak... Ben sistem olarak bu durumlarda şüphelendiğim metodun başına ortasına ve sonuna logger çıktıları koyarım, hangisinde takılıyorsa o bölgede logger aralığını daraltırım...

(05 Tem '13, 17:03) dreampowder dreampowder's gravatar image

Multithread işlemlerde gerçekten exceptionları debug etmek zor oluyor hangi thread hangi data sonucunda hata alıyor yakalamak zor.Logger gerçekten iyi bir çözüm olabilir ya da tek thread yapılıp hangi datada hata alındığı bulunabilir. Ama buradaki hatada bence üstünde çalıştığın listede işlem yapmaya çalışıyorsun. java.util.ConcurrentModificationException hatası bu yüzden geliyor olabilir.

Listeyi doldurduktan sonra şu işlemi liste için uygula demişsindir. O arada bir thread listeyi doldururken diğeri evet doldu gireyim demiştir ama diğer thread listeye hala eleman eklemeye çalışıyorsa felan gibi durumlar oluşmuş olabilir bunun için synchronized.

En basitinden aşağıdaki örnek; Exception in thread "main" java.util.ConcurrentModificationException

    List<String> testList = new ArrayList<String>();
    testList.add("1");
    testList.add("2");

    for (String string : testList) {
        testList.add("3");
    }

OUTPUT : Exception in thread "main" java.util.ConcurrentModificationException

permanent link

cevaplandı: 05 Tem '13, 00:54

gklp's gravatar image

gklp
789317
cevap kabul oranı: 17%

Soruna yaklaşımınız çok doğru ama ben exception mesajında kod satırı veya hangi metodda hata çıktığını bile bilmeden nereye bakacağımı nasıl anlayabilirim? Birden fazla thread kullanan bir uygulama yazarsam kahin olmam lazım :D Yani hatanın neden kaynaklandığını tahmin etmekten başka yapabileceğim birşey yok mu?

(05 Tem '13, 07:14) numankaraaslan numankaraaslan's gravatar image
1

en güzeli logger oluşturmak ama burada hata senin kodlarına kadar gelmemiş. api içinde gerçekleşmiş mahmut_can 'ın dediği gibi bir bug olabilir. Kodların özel değilse paylaşırsan ya da aynı durumu oluşturacak bir şey yazarsan beraber bakabiliriz. Bu arada data için bir kaç blog gördüm.

https://forums.oracle.com/thread/2318840 http://blog.idrsolutions.com/2012/12/handling-threads-concurrency-in-javafx/

şöyle bir not düşmüş arkadaş : So, if you are modifying the Scene Graph from within a Thread, you need to use Platform.runLater() in order to avoid any unwanted Exceptions.

(05 Tem '13, 07:56) gklp gklp's gravatar image

Kardeş süpersin aslında benim sorunum çözüldü Line türünde birşey var onun color özelliğini değiştiriyordum animasyonla fakat aynı anda timer çalışınca çakışma oluyordu. Aslında sorun ve çözümü belli ama bu hata mesajından ne anlayabilirim hala takıldığım nokta bu. 3-4 adet thread çalışıyor olsaydı hangi thread olduğu belli bile olmayacak. Mesela bir download programı 10 indirme için 10 thread açabilir. Hangisinde hata olduğunu bu hatadan anlayamayız sanırım. Esas sorum bu. Ama güzel cevap +1 ;)

(05 Tem '13, 08:18) numankaraaslan numankaraaslan's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×21

Soruldu: 03 Tem '13, 03:51

Görüntüleme: 1,360 kez

Son güncelleme: 05 Tem '13, 17:03

powered by BitNami OSQA