/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
JAVA (Svarer ikke)
Fra : Morten Blinksbjerg N~


Dato : 04-07-02 12:40

Hej,

Jeg har lige et lille spørgsmål...

Jeg har lavet et Javaprogram, der bl.a. bruger Swing og Comm (til
serielkommunikation). Programmet har en søgefunktion der søger i en
Access "database".

Af underlige grunde kører det meget langsomt, og brugeren bliver
lidt for ivrig, og trykker på "søg" knappen lidt for mange gange
(nogen folk tror at computerens hastighed bestemmes med musen).

Det bevirker, at programmet ikke svarer, og når man trykker
ctrl+alt+del siger Windows: JAVA (Svarer ikke), og man skal dræbe
programmet, og starte det igen.

Hvad kan være skyld i det? - dårlig java, windows, computer, kode?

--
Morten Blinksbjerg Nielsen
http://www.mbn.dk/



 
 
Dennis Thrysøe (04-07-2002)
Kommentar
Fra : Dennis Thrysøe


Dato : 04-07-02 13:24

Morten Blinksbjerg Nielsen wrote:
> Hej,
>
> Jeg har lige et lille spørgsmål...
>
> Jeg har lavet et Javaprogram, der bl.a. bruger Swing og Comm (til
> serielkommunikation). Programmet har en søgefunktion der søger i en
> Access "database".
>
> Af underlige grunde kører det meget langsomt, og brugeren bliver
> lidt for ivrig, og trykker på "søg" knappen lidt for mange gange
> (nogen folk tror at computerens hastighed bestemmes med musen).
>
> Det bevirker, at programmet ikke svarer, og når man trykker
> ctrl+alt+del siger Windows: JAVA (Svarer ikke), og man skal dræbe
> programmet, og starte det igen.
>
> Hvad kan være skyld i det? - dårlig java, windows, computer, kode?

Det er svart at svare på, men det kunne godt lyde som noget Java kode
der ikke er lavet optimalt. Så længe alle tråde i Java er optaget vil
den vist ikke svare operativsystemet, når det spørger.

Du kunne prøve, at profile lidt på det og se hvad det er der tager for
lang tid.

-dennis


Peter (04-07-2002)
Kommentar
Fra : Peter


Dato : 04-07-02 13:53

"Morten Blinksbjerg Nielsen" <usenet@mbn.dk> wrote in message
news:ag1btj$284$1@sunsite.dk...
> Jeg har lavet et Javaprogram, der bl.a. bruger Swing og Comm (til
> serielkommunikation). Programmet har en søgefunktion der søger i en
> Access "database".
>
> Af underlige grunde kører det meget langsomt, og brugeren bliver
> lidt for ivrig, og trykker på "søg" knappen lidt for mange gange
> (nogen folk tror at computerens hastighed bestemmes med musen).
>
> Det bevirker, at programmet ikke svarer, og når man trykker
> ctrl+alt+del siger Windows: JAVA (Svarer ikke), og man skal dræbe
> programmet, og starte det igen.
>
> Hvad kan være skyld i det? - dårlig java, windows, computer, kode?

Kan være meget der er galt:) Hvis du gør følgende bør du slippe for
at programmet låser:

1. Sørg for at "søge funktionen" kører i en selvstændig tråd.
2. Ved klik på søgeknappen skal du enten sørge for at kun
en søge tråd kan være igang. Eller endnu nemmere - lås/
disable søgeknappen indtil søgetråden er færdig.

Jeg kommer altid til at ligge for meget kode i GUI'et, hvilket
let kan få det til at låse i uheldige situationer.

Nogen gange har jeg det på fornemmelsen, at hvis et program
er låst i mere end x antal sekunder kan det ikke "overleve".
Men det er absolut en fornemmelse og har sikkert bund i
utålmodighed :)

--
PM



Peter Lind (05-07-2002)
Kommentar
Fra : Peter Lind


Dato : 05-07-02 10:27

"Morten Blinksbjerg Nielsen" <usenet@mbn.dk>

> Jeg har lavet et Javaprogram, der bl.a. bruger Swing og Comm (til
> serielkommunikation). Programmet har en søgefunktion der søger i en
> Access "database".
>
> Af underlige grunde kører det meget langsomt, [...]

Der er flere grunde.
Først og fremmest er JDBC-ODBC koblingen til access utrolig langsom. Hvis du
har mulighed for det, så prøv at bruge f.eks. MySQL istedet for Access, det
giver en hel utrolig hastighedsforøgelse. Det kan også være at der findes
bedre drivere, men jeg tvivler...

Dernæst, hvis din søgefunktion kører inde i din event-handler, så kan
programmet ikke lave andet, (såsom at reagere på musetryk) før søgningen er
færdig.
Som de andre indlæg foreslår, så bør søgefunktionen, ja faktisk alle de dele
af programmet der ikke har noget direkte at gøre med at tegne vinduer og
knapper, foregå i en seperat tråd. I din event-handler skal du så bare sende
en eller anden besked til denne tråd.
Det vil modvirke at programmet låser, når det arbejder langsomt.

Men det vil stadig gå langsomt, og folk bliver utålmodige når der ikke sker
noget på skærmen, så prøv at implementere en progress-bar af en art, så man
kan se at der sker noget - det har helt utrolige virkninger på brugeren, at
der bliver tegnet sådan en blå streg...

Endnu en grund kan være io. Hvis du ikke bruger 1.4's nonblocking io, så vil
et forsøg på at skrive til en ikke-eksisterende port, bevirke at hele
programmet låser, og man er nødt til at lukke det på den hårde måde. Igen er
det nødvendigt med nogle forskellige tråde, og noget overvågning af disse
tråde.

Men prøv at skrive noget debuginfo ud til en log - en stdout eller en fil -
og se hvornår programmet fryser fast - så ved du hvad det er der tager lang
tid, og hvor i programmet du skal begynde trådningen.

mvh
Peter Lind



Morten Blinksbjerg N~ (05-07-2002)
Kommentar
Fra : Morten Blinksbjerg N~


Dato : 05-07-02 12:27

> Der er flere grunde.
> Først og fremmest er JDBC-ODBC koblingen til access utrolig langsom. Hvis du
> har mulighed for det, så prøv at bruge f.eks. MySQL istedet for Access, det
> giver en hel utrolig hastighedsforøgelse. Det kan også være at der findes
> bedre drivere, men jeg tvivler...

Det var også min plan for fremtiden... :)

> Dernæst, hvis din søgefunktion kører inde i din event-handler, så kan
> programmet ikke lave andet, (såsom at reagere på musetryk) før søgningen er
> færdig.
> Som de andre indlæg foreslår, så bør søgefunktionen, ja faktisk alle de dele
> af programmet der ikke har noget direkte at gøre med at tegne vinduer og
> knapper, foregå i en seperat tråd. I din event-handler skal du så bare sende
> en eller anden besked til denne tråd.
> Det vil modvirke at programmet låser, når det arbejder langsomt.

Det vil jeg så prøve, men jeg er ikke så vant til at arbejde med tråde i Java.
De gange jeg har gjort det, har jeg aldrig fundet en optimal måde at få
tråden til at sende data tilbage til hovedprogrammet der startede den...

Nogen der har et fif eller link?

> Men det vil stadig gå langsomt, og folk bliver utålmodige når der ikke sker
> noget på skærmen, så prøv at implementere en progress-bar af en art, så man
> kan se at der sker noget - det har helt utrolige virkninger på brugeren, at
> der bliver tegnet sådan en blå streg...

Det havde jeg også planlagt oprindeligt, men jeg ved jo ikke hvor lang tid
søgningen kommer til at tage...

--
Morten Blinksbjerg Nielsen
http://www.mbn.dk/



Dennis Thrysøe (05-07-2002)
Kommentar
Fra : Dennis Thrysøe


Dato : 05-07-02 12:38

Morten Blinksbjerg Nielsen wrote:
>>Der er flere grunde.
>>Først og fremmest er JDBC-ODBC koblingen til access utrolig langsom.
Hvis du
>>har mulighed for det, så prøv at bruge f.eks. MySQL istedet for
Access, det
>>giver en hel utrolig hastighedsforøgelse. Det kan også være at der findes
>>bedre drivere, men jeg tvivler...
>
>
> Det var også min plan for fremtiden... :)
>
>
>>Dernæst, hvis din søgefunktion kører inde i din event-handler, så kan
>>programmet ikke lave andet, (såsom at reagere på musetryk) før
søgningen er
>>færdig.
>>Som de andre indlæg foreslår, så bør søgefunktionen, ja faktisk alle
de dele
>>af programmet der ikke har noget direkte at gøre med at tegne vinduer og
>>knapper, foregå i en seperat tråd. I din event-handler skal du så
bare sende
>>en eller anden besked til denne tråd.
>>Det vil modvirke at programmet låser, når det arbejder langsomt.
>
>
> Det vil jeg så prøve, men jeg er ikke så vant til at arbejde med
tråde i Java.
> De gange jeg har gjort det, har jeg aldrig fundet en optimal måde at få
> tråden til at sende data tilbage til hovedprogrammet der startede den...
>
> Nogen der har et fif eller link?

Du skal have dem til at bruge en delt struktur, og beskytte denne for
samtidig brug. Det kan du gøre ved at bruge 'synchronized'
metoder/blokke eller Object.wait() og Object.notify().

>>Men det vil stadig gå langsomt, og folk bliver utålmodige når der
ikke sker
>>noget på skærmen, så prøv at implementere en progress-bar af en art,
så man
>>kan se at der sker noget - det har helt utrolige virkninger på
brugeren, at
>>der bliver tegnet sådan en blå streg...
>
>
> Det havde jeg også planlagt oprindeligt, men jeg ved jo ikke hvor
lang tid
> søgningen kommer til at tage...

Så kan du evt. lave en eller anden form for animation. F.eks. bare en
progress bar der kører lidt frem og tilbage. (Måske understøtter Swings
progress bar allerde denne "ukendt maksimum" mode?)

-dennis


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste