[ Sale_123 @ 18.02.2009. 00:23 ] @
Pozdrav svima.

Trenutno pravim jedan program, pa bih htio par savjeta od iskusnijih korisnika. Naime, u mom programu trenutno postoje 3 vazne komponente,

DrawingViewer, Model i Controler.

Model se sastoji od Slojeva, Sloj od Grupa, Grupa od Profila, a Profile od Oblika (Shape: Line, Arc, Ellipse)

Svaka ova klasa (Model, Layer, Group, Profile) implementira Collection interface.

DrawingViewer implementira interface Observer i na svaku promjenu u modelu, ponovo iscrtava model.

E sad, u jednom trenutku je potrebno izvrsiti provjeru ispravnosti modela, koje moze da traje i do nekoliko sekundi. Pri tome aplikacija mora da odgovora na akcije korisnika i da omoguci korisniku dodavanje novih Slojeva, Grupa, Profila itd. Razmisljao sam da tu provjeru uradim u jednoj posebnoj niti, medjutim ostaje sledeci problem: Ako ta nova nit koja vrsi provjeru modela zakljuca model, tada on nece biti dostupan komponenti DrawingViewer i uopste aplikaciji jer ce ta komponenta koja se vrti na event dispatching thread pokusati isto taj model da zakljuca i onda ce morati da ceka dok prva nit na kojoj se vrsi provjera modela ne zavrsi posao, iz cega proizilazi da ce se program ponasati isto kao da sam provjeru vrsio i na EDT.

Kakvu strategiju ovde primjeniti da bi se izbjeglo "gladovanje" ED niti?
[ Chobicus @ 18.02.2009. 09:02 ] @
Ne znam zašto bi hteo da dozvoliš istovremenu validaciju i editovanje nekih objekata kad oni u svakom trenutku mogu promeniti validnost.
Po ovome što si napisao logično je da korisniku blokiraš rad ( http://java.sun.com/docs/books...swing/components/progress.html ) dok se ne odradi provera ispravnosti.
[ Sale_123 @ 18.02.2009. 11:14 ] @
Hmmm, ideja za to mi je pala kada sam vidio da dok ja kuckam kod u NetBeans-u on u pozadini stalno taj fajl kompajlira i javlja mi greske.

Ok, mogu ja da blokiram izmjene na tome, ali sta ako kontrola dobije zahtjev za ponovnim iscrtavanjem. Tada ce pokusati da zakljuca model i opet imam isti problem.
[ gajo2 @ 18.02.2009. 12:35 ] @
Mislim da Netbeans ceka da ti pauziras par sekundi pre nego sto krene da analizira tvoj kod
[ Sale_123 @ 18.02.2009. 13:52 ] @
Nebitno, princip je isti, jer u trenutku kad pocne kompaliranje i ja pocnem da kucam nastaje isti problem
[ Chobicus @ 19.02.2009. 08:18 ] @
NetBeans, ako radi nešto u pozadini, radi na kodu koji ti ne menjaš. Kada prekineš kucanje može da pokrene proveru tvog novog koda.

Heh... Sad mi pade na pamet. Pa ovo liči na "readers-writers" problem u sinhronizaciji

Ti si "writer".
NetBeans je "reader".