2009-12-08 5 views

Répondre

0

Initialement, j'ai pensé à System.in.read(), mais vous devez obtenir des entrées sans appuyer sur Entrée. Cela nécessite une interaction avec la console native (et la console est différente sous chaque système).

Donc, la réponse est "non, il n'y a pas d'analogue direct".

1

Il n'y a pas d'équivalent getch en Java. Vous pouvez aussi bien créer un composant graphique et lier keyEvent Listener.

1

Vous pouvez utiliser la méthode ConsoleReader.readVirtualKey() de la bibliothèque JLine. Voir http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey(). Si vous ne voulez pas utiliser une bibliothèque tierce, et si vous utilisez Mac OS X ou UNIX, vous pouvez simplement profiter de la même astuce que JLine pour lire des caractères individuels: exécutez simplement la commande "stty -icanon min 1" avant d'exécuter votre programme, puis System.in ne sera plus en ligne buffered et vous pouvez obtenir un caractère individuel en utilisant System.in.read(). Malheureusement, cette astuce ne fonctionne pas sous Windows, vous devrez donc utiliser une bibliothèque native pour vous aider (ou simplement utiliser JLine).

4

Je trouve un code, la fonction équivalente à la « _getch de C()


public static void getCh() { 
     final JFrame frame = new JFrame(); 
     synchronized (frame) { 
      frame.setUndecorated(true); 
      frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); 
      frame.addKeyListener(new KeyListener() { 
       @Override 
       public void keyPressed(KeyEvent e) { 
        synchronized (frame) { 
         frame.setVisible(false); 
         frame.dispose(); 
         frame.notify(); 
        } 
       } 
       @Override 
       public void keyReleased(KeyEvent e) { 
       } 
       @Override 
       public void keyTyped(KeyEvent e) { 
       } 
      }); 
      frame.setVisible(true); 
      try { 
       frame.wait(); 
      } catch (InterruptedException e1) { 
      } 
     } 
    } 
+0

-moi si je me trompe, mais ne devrait pas 'keyPressed',' keyReleased' et '' @ keyTyped' ont Override' devant eux? Je ne pense pas que ça marchera autrement. En dehors de cela, excellente réponse. +1 – aggregate1166877

+4

@Override est juste une annotation, la méthode de surcharge fonctionne encore très bien sans elle. Tout ce qu'il fait indique au compilateur que la méthode * devrait * remplacer une autre méthode. – lynks

+2

Comment cette fonction est-elle équivalente à _getch() de C si elle retourne void? N'aurait-il pas besoin de retourner un personnage? Comme il a une notation de substitution, avons-nous besoin d'écrire du code qui l'implémente pour l'utiliser? – Joe

0

méthode sur mesure en Java pour la fonction getch() de C



import java.awt.event.KeyListener; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 

class getch 
{ 
    public static void getCh() 
    { 
     final JFrame frame = new JFrame(); 
     synchronized(frame) 
     { 
      frame.setUndecorated(true); 
      frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); 
      frame.addKeyListener(new KeyListener() 
      { 
       public void keyPressed(KeyEvent e) 
       { 
        synchronized(frame) 
        { 
         frame.setVisible(false); 
         frame.dispose(); 
         frame.notify(); 
        } 
       } 

       public void keyReleased(KeyEvent e) 
       { 
       } 

       public void keyTyped(KeyEvent e) 
       { 
       } 
      }); 
      frame.setVisible(true); 
      try 
      { 
       frame.wait(); 
      } 
      catch(InterruptedException e1) 
      { 
      } 
     } 
    } 
} 
-1

pourquoi ne pas simplement créer une variable Scanner qui ne l'utilise pas, le programme, partout.

pause0 = pause1.nextInt();

: l il semble beaucoup plus facile ... Plus vous pouvez mettre un message disant "Appuyez sur pour continuer.";

0

Cela va faire l'affaire mais je ne travaille qu'à partir de la ligne de commande. Pas de IDE

Console c =System.console(); 
Reader r = c.reader(); 
try { 
    num= r.read(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
Questions connexes