2009-12-08 67 views

Trả lời

0

Ban đầu tôi nghĩ về System.in.read(), nhưng bạn cần nhập thông tin mà không cần nhấn Enter. Điều đó đòi hỏi tương tác bảng điều khiển gốc (và giao diện điều khiển là khác nhau theo từng hệ thống).

Vì vậy, câu trả lời là "không, không có tương tự trực tiếp".

1

Không có tương đương với getch trong java. Bạn cũng có thể tạo một thành phần GUI và ràng buộc trình nghe KeyEvent.

1

Bạn có thể sử dụng phương thức ConsoleReader.readVirtualKey() của thư viện JLine. Xem http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey().

Nếu bạn không muốn sử dụng thư viện của bên thứ ba và nếu bạn đang sử dụng Mac OS X hoặc UNIX, bạn chỉ có thể tận dụng cùng một mẹo mà JLine sử dụng để có thể đọc các ký tự riêng lẻ: chỉ cần thực thi lệnh "stty -icanon min 1" trước khi chạy chương trình của bạn, và sau đó System.in sẽ không còn là dòng đệm và bạn có thể nhận được một ký tự riêng lẻ bằng cách sử dụng System.in.read(). Thật không may, mẹo này không hoạt động trên Windows, vì vậy bạn sẽ cần sử dụng một thư viện riêng để trợ giúp (hoặc chỉ sử dụng JLine).

4

Tôi tìm thấy một mã, chức năng Tương đương với “_getch 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

Đúng tôi nếu tôi là sai, nhưng không nên' keyPressed',' keyReleased', và 'keyTyped' có' @ Override' ở phía trước họ? Tôi không nghĩ rằng nó sẽ làm việc khác. Ngoài ra, câu trả lời xuất sắc. +1 – aggregate1166877

+4

@Override chỉ là chú thích, ghi đè phương pháp vẫn hoạt động tốt mà không có nó. Tất cả nó làm nó nói với trình biên dịch rằng phương pháp * nên * được ghi đè một số phương pháp khác. – lynks

+2

Hàm này tương đương với hàm _getch của C như thế nào nếu nó trả về void? Nó sẽ không cần phải trả lại một nhân vật? Vì nó đã ghi đè ký hiệu, chúng ta có cần phải viết mã thực hiện nó để sử dụng nó không? – Joe

0

Custom-made phương pháp trong Java cho getch() chức năng của 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

lý do tại sao bạn không chỉ cần tạo một máy quét biến mà không sử dụng nó, chương trình, ở bất cứ đâu.

pause0 = pause1.nextInt();

: l có vẻ dễ dàng hơn nhiều ... Ngoài ra, bạn có thể đặt thông báo cho biết "Nhấn để tiếp tục.";

0

Điều này sẽ thực hiện thủ thuật nhưng tôi chỉ làm việc từ dòng lệnh. Không phải từ IDE

Console c =System.console(); 
Reader r = c.reader(); 
try { 
    num= r.read(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
Các vấn đề liên quan