2009-12-08 159 views

回答

0

最初我想到了System.in.read(),但是您需要在不按Enter的情況下獲得輸入。這需要本地控制檯交互(並且每個系統下的控制檯都不相同)。

所以答案是「不,沒有直接的模擬」。

1

在java中沒有getch等價物。你也可以創建一個GUI組件並綁定keyEvent監聽器。

1

您可以使用JLine庫的ConsoleReader.readVirtualKey()方法。請參閱http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey()

如果您不想使用第三方庫,並且您使用的是Mac OS X或UNIX,則可以利用JLine用來讀取單個字符的相同技巧:只需執行命令「stty -icanon min 1」,然後運行你的程序,然後System.in將不再被行緩衝,你可以使用System.in.read()獲得一個單獨的字符。不幸的是,這個技巧在Windows上不起作用,所以你需要使用本地庫來幫助(或者僅僅使用JLine)。

4

我發現了一個代碼,相當於函數C中的「_getch()


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

糾正我,如果我錯了,但不應該'keyPressed','keyReleased'和'keyTyped'有'@ Override'在他們面前?我認爲這不會起作用。除此之外,優秀的答案。 +1 – aggregate1166877 2012-09-11 19:08:56

+4

@Override只是一個註釋,如果沒有它,方法覆蓋仍然可以正常工作。它所做的只是告訴編譯器,方法*應該重寫其他一些方法。 – lynks 2012-11-08 16:43:44

+2

如果函數返回void,該函數如何等價於C的_getch()?它不需要返回一個字符嗎?由於它具有重寫符號,我們是否需要編寫實現它的代碼才能使用它? – Joe 2015-09-15 22:14:52

0

定做方法在Java中的殘培()的ç



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

你爲什麼不創建一個變量掃描器,不要在任何地方使用它,程序。

pause0 = pause1.nextInt();

:l它似乎更容易...另外,你可以把一個消息說:「按繼續。

0

這將做的伎倆,但我只從命令行工作。不是從IDE

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