Domanda

Dire che ho una GUI, e voglio che il programma da eseguire in realtà quando si preme la barra spaziatrice, ma se la barra spaziatrice viene premuto di nuovo allora voglio il programma per uscire. Sarebbe qualcosa di simile a questo lavoro?

public class MouseClicker extends JApplet implements KeyListener{
int counter = 0;
MouseClicker m1 = new MouseClicker();

//all of the other methods

public void keyPressed( KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode==KeyEvent.VK_SPACE){
 m1.click();
 counter ++;
 if(counter%2==0)
  System.exit(0);
}
//other methods needed for KeyListener
}
È stato utile?

Soluzione

Provare per credere; -)

Scherzi a parte, che cosa vuoi dire che si desidera programmare da eseguire quando si preme la barra spaziatrice? A meno che il programma è già in esecuzione, come hai intenzione di ricevere il KeyEvent?

Per quanto riguarda l'altra metà della tua domanda, il codice che avete dovrebbe, in generale, fare uscire Java quando si preme la barra spaziatrice. Si noti che non c'è nessun punto nel usando un contatore, dal momento che non appena esce Java, il valore del contatore è perduto. Si noti inoltre che JApplet è un'eccezione alla System.exit "in generale" ... che normalmente non puoi chiamare da un applet, perché l'applet viene eseguito sotto il controllo di un browser e Java si suppone solo per uscire quando l'utente chiude il browser , non ogni volta che l'applet è fatto. Ci potrebbero essere altri applet in esecuzione nello stesso JVM e non potrebbe essere fatto con quello che stanno facendo ancora.

Altri suggerimenti

Probabilmente, penso che il codice di AWT è corretto, ma il resto è terribilmente criptico (Non che io non lo capisco, ma non esprime ciò che si sta effettivamente facendo molto bene, vero?)

Come su:

boolean running=false;

...
if(running)
    System.exit(0);
else
    running=true;

, invece?

Aggiornamento: Dopo aver letto la discussione sul post di altri, che si sta per avere un po 'di stranezza.

C'è questo concetto di thread AWT. Tutto fatto con l'AWT deve essere fatto su quel thread. Così, quando si preme la barra spaziatrice, si otterrà tale evento sul filo AWT. Probabilmente non si desidera mantenere, però, perché il tempo che si tiene su di esso, sarà impedire gli aggiornamenti di altri grafici.

Suggerisco di guardare SwingTimer impostare un timer swing al avviserà ogni pochi ms, e che la notifica arriverà sul thread AWT in modo che si può utilizzare per fare clic con il pulsante, poi basta uscire e attendere il prossimo evento timer .

Quando si preme di nuovo la barra spaziatrice, System.exit () dovrebbe funzionare bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top