Permalänk
Medlem

For loopar i Java

När min kompis gör en for loop i java så tar den upp typ all processoruppmärksamhet, och låser programet tills den utförts, ur gör jag så att jag kan klicka på en knapp medans en for loop utförs?

//copyright to Markus Å!!!
import java.awt.*;
import java.applet.Applet;
public class Spel extends Applet{
boolean vand = true;
Button knappStop = new Button("Stopp");
public void init(){
setBackground(Color.white);
setForeground(Color.black);
add(knappStop);
}
public void paint(Graphics g){
g.drawRect(0,0,199,199);
for (int x = 0; x < 2; x++){
for (int i = 20; i < 180; i++){
for (int j = 0; j < 5000000; j++){
}
g.setColor(Color.black);
g.drawLine(i, 20, i, 180);
g.setColor(Color.white);
g.drawLine(i-1,20,i-1,180);
}
for (int k = 180; k > 20; k--){
for (int l = 0; l < 5000000; l++){
}
g.setColor(Color.black);
g.drawLine(k, 20, k, 180);
g.setColor(Color.white);
g.drawLine((k+1),20,(k+1),180);
}
}
}
}

Visa signatur

ERx -> Alltid Trött IWill KK400-RS | Athlon Xp 2000+ | 256mb ddr | 48x cdrw | Samsung dvd | Nec ND-1300A DVD+-RW | GF4Mx440 128mb | Wd 80GB + Ibm/Hitachi 120Gb | Tvkort
"Fascism är den enda ideologin som fungerar" - Koffe

Permalänk
Medlem

...din första loop kommer att köras
2 * (180 - 20) * 5 000 000, alltså 1 600 000 000 gånger (om jag nu inte såg fel p.g.a intenderingen) så det är inte alls så konstigt att din cpu används till 100%.

Om du nu vill köra andra saker samtidigt så rekommenderar jag att du spanar lite efter trådar

Visa signatur

{|XSX|PS3|PS4|}

Permalänk
Medlem

Det finns väl någon form av Sleep-funktion?

Permalänk
Medlem

Släng in följande kodsnutt på lämpligt ställe i koden så skall det ordna sig:

try { wait(1); } catch (java.lang.InterruptedException e) { }

Visa signatur

Fractal Design Define R3 | Asus Z170 Pro Gaming | Intel Core i7 6700K | 32 GB Corsair Vengaeance LPX DDR4 2666 MHz | Asus Radeon RX 580 | EVGA SuperNova 850 G2 | Kingston A400 480 GB SSD | 2 x WD Caviar Black 1TB | 2 x Crucial MX500 500 GB SSD

Permalänk
Medlem

hur ska man skriva i actionhandlern då bergling?

Visa signatur

ERx -> Alltid Trött IWill KK400-RS | Athlon Xp 2000+ | 256mb ddr | 48x cdrw | Samsung dvd | Nec ND-1300A DVD+-RW | GF4Mx440 128mb | Wd 80GB + Ibm/Hitachi 120Gb | Tvkort
"Fascism är den enda ideologin som fungerar" - Koffe

Permalänk
Medlem

Tråda upp funktionen istället.

Visa signatur

[ Adopt, Adapt and Apply ]

Permalänk
Medlem

akke: vad menar du med det?

Visa signatur

ERx -> Alltid Trött IWill KK400-RS | Athlon Xp 2000+ | 256mb ddr | 48x cdrw | Samsung dvd | Nec ND-1300A DVD+-RW | GF4Mx440 128mb | Wd 80GB + Ibm/Hitachi 120Gb | Tvkort
"Fascism är den enda ideologin som fungerar" - Koffe

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av ERx
akke: vad menar du med det?

Antagligen att du ska ha två trådar i programmet (threads) som körs parallellt, en som hanterar input och den andra som är själva programloopen.

Permalänk
Medlem

Don_Tomaso: Hur gör man det?

Visa signatur

ERx -> Alltid Trött IWill KK400-RS | Athlon Xp 2000+ | 256mb ddr | 48x cdrw | Samsung dvd | Nec ND-1300A DVD+-RW | GF4Mx440 128mb | Wd 80GB + Ibm/Hitachi 120Gb | Tvkort
"Fascism är den enda ideologin som fungerar" - Koffe

Permalänk
Medlem

http://java.about.com/cs/javathreads/

Och är det svårt med engelskan så är det just det du ska lära dig innan du börjar programmera.

Permalänk
3dfx Fanboy

eh...

vad är meningen med:

for (int j = 0; j < 5000000; j++){ }

?????????????????????

Visa signatur

Runnin with a pump pump
no bluffin we buck buck

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av misko
eh...

vad är meningen med:

for (int j = 0; j < 5000000; j++){ }

?????????????????????

Att låta programmet stanna upp en stund.

Permalänk
Medlem

Finns väl en thread.sleep() function vad jag minns? (Länge sen jag körde java)

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Hummus
Finns väl en thread.sleep() function vad jag minns? (Länge sen jag körde java)

Visst finns en sådan funktion, läs de första svaren i denna tråd igen.

Permalänk
3dfx Fanboy
Citat:

Ursprungligen inskrivet av Don_Tomaso
Att låta programmet stanna upp en stund.

Fullständigt förbjudet att göra på det sättet

Det är ungefär som att i en bil lägga in ettan, trycka in gasen till max samtidigt som handbromsen är påslagen..

Visa signatur

Runnin with a pump pump
no bluffin we buck buck

Permalänk
Medlem

Ungefär.

Permalänk
Medlem

Nu har jag skrivit om koden från början, med trådar, problemet är bara det att
strecket inte rör på sig... koden:

import java.awt.*; import java.applet.Applet; public class spelet extends Applet implements Runnable { boolean vanda = false; boolean tryck = false; int a, b, c, d; Button knappStop = new Button("Stopp"); // Credits to Heikki for supercoding Button knappRestart =new Button("Reset"); Thread trad; public void init(){ setBackground(Color.white); setForeground(Color.black); add(knappStop); add(knappRestart); } public boolean action(Event evt, Object arg) { if(evt.target instanceof Button){ trad.stop(); } return true; } public void start() { if (trad == null) { trad = new Thread(this); trad.start(); } } public void stop() { if (trad != null) { trad.stop(); trad = null; } } public void run(){ for(a=0; ; a ++){ if(vanda != true){ for(b=20; b <180; b++){ try{ trad.sleep(20); }catch (java.lang.InterruptedException e) { } if(b >= 180){ vanda = true; break; } if(tryck = true){ trad.stop(); } } } else { for(b=180; b > 20; b--){ try{ trad.sleep(20); } catch (java.lang.InterruptedException e) { } if(b <= 20){ vanda = false; break; } } } } } public void paint(Graphics g){ g.drawRect(0,0,199,199); if(vanda != true){ g.setColor(Color.black); g.drawLine(b, 20, b, 180); g.setColor(Color.white); g.drawLine(b-1,20,b-1,180); } else{ g.setColor(Color.black); g.drawLine(b, 20, b, 180); g.setColor(Color.white); g.drawLine(b-1,20,b-1,180); } } }

Visa signatur

ERx -> Alltid Trött IWill KK400-RS | Athlon Xp 2000+ | 256mb ddr | 48x cdrw | Samsung dvd | Nec ND-1300A DVD+-RW | GF4Mx440 128mb | Wd 80GB + Ibm/Hitachi 120Gb | Tvkort
"Fascism är den enda ideologin som fungerar" - Koffe