2009-12-08 13 views

Respuesta

0

Inicialmente pensé en System.in.read(), pero debe obtener una entrada sin presionar Enter. Eso requiere interacción con la consola nativa (y la consola es diferente en cada sistema).

Así que la respuesta es "no, no hay un análogo directo".

1

No hay equivalente de getch en java. También podría crear un componente GUI y enlazar KeyEvent Listener.

1

Puede usar el método ConsoleReader.readVirtualKey() de la biblioteca JLine. Ver http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey().

Si no desea utilizar una biblioteca de terceros, y si utiliza Mac OS X o UNIX, puede aprovechar el mismo truco que JLine utiliza para poder leer caracteres individuales: simplemente ejecute el comando "stty -icanon min 1" antes de ejecutar su programa, y ​​System.in dejará de estar en la línea y podrá obtener un carácter individual utilizando System.in.read(). Desafortunadamente, este truco no funciona en Windows, por lo que necesitaría usar una biblioteca nativa para ayudar (o simplemente usar JLine).

4

me encontré con un código, función equivalente a


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

Corrígeme si me equivoco, pero no debería 'keyPressed',' keyReleased', y '' @ keyTyped' tener Override' ¿en frente de ellos? No creo que funcione de otra manera. Aparte de eso, excelente respuesta. +1 – aggregate1166877

+4

@Override es solo una anotación, la anulación de método sigue funcionando sin ella. Todo lo que hace le dice al compilador que el método * debe * anular otro método. – lynks

+2

¿Cómo es esta función equivalente a _getch() de C si devuelve vacío? ¿No sería necesario devolver un personaje? Como ha anulado la notación, ¿necesitamos escribir código que la implemente para usarla? – Joe

0

encargo método en Java para getch() la función 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) 
      { 
      } 
     } 
    } 
} 
“_getch de C()
-1

¿por qué no creas un escáner variable que no lo usa, el programa, en cualquier lugar?

pause0 = pause1.nextInt();

: l parece mucho más fácil ... Además, puede poner un mensaje que diga "Presione para continuar";

0

Esto hará el truco, pero solo funciona desde la línea de comandos. No de IDE

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