Thsn. Mesaj tarihi: Ocak 13, 2013 Paylaş Mesaj tarihi: Ocak 13, 2013 Merhaba arkadaşlar, Ben elimden geldiğince bir GUI oluşturup javada semaphore classını kullanarak bu problemi implemente etmeye çalıştım, fakat java.lang.ArrayIndexOutOfBoundsException: 5 ve java.lang.NullPointerException şeklinde hatalar almaktayım İlgili kod public class Philosopher implements Runnable { private static Table table; private int ID; private int N = 4; private static Semaphore s1 = new Semaphore(5) ; private static Semaphore[] sarray = new Semaphore[5]; private int[] array = new int[6]; private int thinking = 0; private int hungry = 1; private int eating = 2; private int left = (ID + N - 1) % N; private int right = (ID + 1) % N; void test(int i) { if((array[i] == hungry) && (array[left] != eating) && (array[right] != eating)) { table.ForkTake_GUI(i); array[i] = eating; sarray[i].release(); } } void take_forks(int i) { try { s1.acquire(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } array[i] = hungry; table.Hungry_GUI(i); test(i); table.Eating_GUI(i); try { s1.release(); sarray[i].acquire(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } void put_forks(int i) { table.StopEating_GUI(i); try { s1.acquire(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } array[i] = thinking; test(left); test(right); table.ForkPut_GUI(i); s1.release(); } public Philosopher(int i) { setID(i); } public void run() { while(true) { Random RandomGenerator = new Random(); int randomNum = RandomGenerator.nextInt(10); try { Thread.sleep((randomNum * 1000)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } take_forks(ID); put_forks(ID); } } public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { table = new Table(); table.frame.setVisible(true); } catch(Exception e){ e.printStackTrace(); } } }); Philosopher p1 = new Philosopher(1); Philosopher p2 = new Philosopher(2); Philosopher p3 = new Philosopher(3); Philosopher p4 = new Philosopher(4); Philosopher p5 = new Philosopher(5); Thread pt1 = new Thread(p1); Thread pt2 = new Thread(p2); Thread pt3 = new Thread(p3); Thread pt4 = new Thread(p4); Thread pt5 = new Thread(p5); sarray[0] = new Semaphore(1); sarray[1] = new Semaphore(1); sarray[2] = new Semaphore(1); sarray[3] = new Semaphore(1); sarray[4] = new Semaphore(1); pt1.start(); pt2.start(); pt3.start(); pt4.start(); pt5.start(); } public int getID() { return ID; } public void setID(int iD) { ID = iD; } } Var mıdır fikri olan? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Deacon Mesaj tarihi: Ocak 13, 2013 Paylaş Mesaj tarihi: Ocak 13, 2013 Lutfen kodu duzgun bir siteye paste edip linki verebilir misin? Pastebin ya da ideone mesela. + Stacktraceleri de koyarsan daha iyi. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Thsn. Mesaj tarihi: Ocak 13, 2013 Konuyu açan Paylaş Mesaj tarihi: Ocak 13, 2013 Kusura bakmayasın, çok karışık olmuş cidden. Buyur:http://ideone.com/LJFXIg Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Deacon Mesaj tarihi: Ocak 13, 2013 Paylaş Mesaj tarihi: Ocak 13, 2013 En azindan hatalarin satirlari da lutfen. Stack trace daha da iyi olur. Butun kodu okumak istemiyorum :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Eralpb Mesaj tarihi: Ocak 13, 2013 Paylaş Mesaj tarihi: Ocak 13, 2013 GUI'de mi sorun var yoksa logicte mi? Indirebildin mi problemi? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Deacon Mesaj tarihi: Ocak 13, 2013 Paylaş Mesaj tarihi: Ocak 13, 2013 Gordum galiba. 247. satirda 5 boyutlu array aciosun. Sonra philosopher'larin ID'leri 1...5 olarak atiyorsun. O yuzden take_fork ve put_fork fonksiyonlarini id'si 5 olan philosopher cagirinca patliyor kodun. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Gladmir Mesaj tarihi: Ocak 14, 2013 Paylaş Mesaj tarihi: Ocak 14, 2013 Philosopher p5 = new Philosopher(5); Constructor da setter i cagirdin, ID = 5; gidip ForkTake_GUI (ID) dedin, ArrayIndexOutOfBounds yedin. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sipeyskeyk Mesaj tarihi: Ocak 14, 2013 Paylaş Mesaj tarihi: Ocak 14, 2013 Ulan adeta bambaşka bir dünya, tıbba bile bu kadar yabancı değilim. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Thsn. Mesaj tarihi: Ocak 14, 2013 Konuyu açan Paylaş Mesaj tarihi: Ocak 14, 2013 Tekrardan kusura bakmayasınız, çözdüm diye geri bakmamışım buraya =), yalnız bu sefer de 275 ve 330. satırlarda java.lang.NullPointerException hatası alıyorum nedendir acaba sizce? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
zgrw Mesaj tarihi: Ocak 14, 2013 Paylaş Mesaj tarihi: Ocak 14, 2013 yorumlari okumadim muhtemelen biri yazmistir hatta koda da bakmadim ama hatalara bakinca direk bir arrayin sinirlarini astigini soyleyebilirim. indexlerini kontrol etmen lazim Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Suark Mesaj tarihi: Ocak 15, 2013 Paylaş Mesaj tarihi: Ocak 15, 2013 muhtemelen bi arrayin sınırından taştın felan, take_forks(ID); bunun götürdüğü table.Hungry_GUI(i); burda, hungry_guinin içinde plates[i].setIcon(new ImageIcon(ImageIO.read(new File("spaghetti_yellow.jpg")))); böle bi array var. take forkstaki ID, plates in içine "i" diye giriyor. ID nin nerde set edildiğini bulamadım, run diye bir methodun var onu nerde invoke ediosun onu da bulamadım ama sıkıntı muhtemelen ID nin sayısının 4 ten büyük olması. plates sonuçta 5 size lı bi array. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Gladmir Mesaj tarihi: Ocak 15, 2013 Paylaş Mesaj tarihi: Ocak 15, 2013 Thsn. said: Tekrardan kusura bakmayasınız, çözdüm diye geri bakmamışım buraya =), yalnız bu sefer de 275 ve 330. satırlarda java.lang.NullPointerException hatası alıyorum nedendir acaba sizce? Eventqueue da schedule edilen Runnable icin de new Table () demissin. Eger ki duzeltme yaptiktan sonra line number larin kaymadiysa, table in null. Eventqueue baska thread de is yapiyorsa, Race condition var. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar