Avatar billede xyon Nybegynder
05. maj 2006 - 12:22 Der er 14 kommentarer

Multi-threading og KeyListener

Hej folkens,

Kan nogen af jer hjælpe mig med at få mit program til at gå i pause-mode indtil der bliver trykket på en tast på tastaturet? Jeg går ud fra det er noget med thread.wait() kobineret med en keylistener og noget thread.notify()?

Håber nogen af jer kan hjælpe. Evt. med et lille eksempel, da jeg er lidt java-noob:)

På forhånd tak.
Avatar billede bris Nybegynder
05. maj 2006 - 13:42 #1
Tjah.. Skal det køre fra en prompt eller fra noget brugergrænseflade?
Avatar billede bris Nybegynder
05. maj 2006 - 13:43 #2
Hov, skal den vente på input, eller skal den bare "lytte" på tastaturet? Sådan en slags messenger funktion, hvor man går fra den ene status til den anden, hvis man ikke bruger mus/tastatur?
Avatar billede xyon Nybegynder
05. maj 2006 - 18:09 #3
Jeg vil forsøge at uddybe:
Vi skal lave et turbaseret spil, baseret på Swing UI, hvor brugeren flytter sin "helt" og modstanderne, baseret på en AI, træffer et valg om at flytte også.
Vi har brug for at vores helt flytter sig eet felt når man trykker på en tast. Derefter skal modstanderne træffe deres valg om at rykke eet felt efter hvor helten står i forhold til dem. Man kan dermed sige at hele programmet står på "pause" hver eneste gang man har trykket på en tast og modstanderne, med lidt delay, har foretaget deres ryk. Der skal jo ikke ske noget før man så igen trykker på en tast og flytter helten. Derfor mente vi at thread.wait() og notify() funktionerne ville være smarte.
Har i andre ideer?
Avatar billede arne_v Ekspert
06. maj 2006 - 04:41 #4
bris>

KeyListener antyder ligesom GUI
Avatar billede arne_v Ekspert
06. maj 2006 - 04:41 #5
xyon>

Swing + threads + wait/notify lyder som em risikabel cocktail

kan du ikke bare ignorere al input indtil det er spillerens tur ?
Avatar billede xyon Nybegynder
08. maj 2006 - 09:55 #6
Forstår ikke helt hvad du mener. Kan du uddybe? Evt. komme med et lille kode-eksempel?
Avatar billede arne_v Ekspert
09. maj 2006 - 05:10 #7
eksempel:

package may;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class KeyFun extends JFrame implements KeyListener {
    private int count;
    public KeyFun() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        count = 0;
        addKeyListener(this);
        setSize(300, 300);
        setTitle("Only every third keystroke works");
    }
    public static void main(String[] args) {
        JFrame f = new KeyFun();
        f.setVisible(true);
    }
    public void keyTyped(KeyEvent e) {
    }
    public void keyPressed(KeyEvent e) {
        if(active()) {
            JOptionPane.showMessageDialog(this, "You pressed " + (char)e.getKeyCode());
        }
    }
    private boolean active() {
        count++;
        return count % 3 == 0;
    }
    public void keyReleased(KeyEvent e) {
    }
}
Avatar billede arne_v Ekspert
09. maj 2006 - 05:10 #8
min active gør at kun hver tredie key stroke virker

din active skal teste for om det er spillerens tur
Avatar billede xyon Nybegynder
09. maj 2006 - 11:45 #9
Det ser godt ud. Vi vil dog gerne have at den er uafhængig af GUI'en. Så den eksempelvis bare sysout'er hvad key man har trykket på. Kan det lade sig gøre?
Avatar billede arne_v Ekspert
09. maj 2006 - 12:59 #10
umiddelbart vil jeg tro at du i console kun kan læse linier ikke enkelt taster
Avatar billede xyon Nybegynder
09. maj 2006 - 13:31 #11
Fair nok. Vi skal bare have den til at skrive et eller andet uden at vi behøver oprette et nyt vindue.
Avatar billede arne_v Ekspert
10. maj 2006 - 04:39 #12
ikke forstået

i en console app kan man ikke noget førend der trykkes retur

I skrev at I brugte Swing

i swing kan I godt lytte på en eksisternde frame uden at åbne en ny
Avatar billede xyon Nybegynder
10. maj 2006 - 09:04 #13
Ja, vi bruger swing, men vi er interesserede i at gøre vort program helt uafhængigt af GUI, så det kan køre helt uden. Vi tester hele spillet tekstbaseret via konsollen inden vi overhovedet begynder at lave GUI.
Avatar billede arne_v Ekspert
12. maj 2006 - 02:24 #14
input er UI afhængigt

input er enten Swing eller console specifikt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester