2011-05-02 34 views
7

Tôi muốn viết một ký tự vào cùng một vị trí trong cửa sổ bảng điều khiển.Viết đến cùng một vị trí trong cửa sổ bảng điều khiển với java

Các ký tự tôi muốn viết là /-\_. Điều này sẽ giúp tôi có được một chút spinner tôi có thể hiển thị để hiển thị tiến độ hoặc tải.

Bạn có thể viết các ký tự cho cùng một vị trí như thế nào? Nếu không, bạn sẽ kết thúc với một cái gì đó như thế này /-\_/-\_/-\

+1

Đây có phải là thiết bị đầu cuối của cửa sổ hoặc một số thiết bị đầu cuối khác không? –

+0

Windows ngay bây giờ, nhưng muốn nó là nền tảng chéo – user489041

Trả lời

17

Với Java 6 bạn có thể sử dụng Console để làm một cái gì đó như thế này:

class Main { 
    public static void main(String[] args) throws InterruptedException { 
     String[] spinner = new String[] {"\u0008/", "\u0008-", "\u0008\\", "\u0008|" }; 
     Console console = System.console(); 
     console.printf("|"); 
     for (int i = 0; i < 1000; i++) { 
      Thread.sleep(150); 
      console.printf("%s", spinner[i % spinner.length]); 
     } 
    } 
} 

\u0008 là nhân vật BackSpace đặc biệt. In sẽ xóa ký tự cuối cùng trên dòng. Bằng cách bắt đầu in một số | và sau đó thêm \u0008 trước khi tất cả các ký tự khác bạn nhận được hành vi spinner.

Lưu ý rằng điều này có thể không tương thích 100% với tất cả bàn điều khiển (và rằng System.console() có thể trả lại null).

Cũng lưu ý rằng bạn không nhất thiết phải sử dụng lớp bảng điều khiển, vì việc in chuỗi này thành đầu ra tiêu chuẩn thường chỉ hoạt động tốt.

+0

+1 wow! tuyệt quá! Tôi không biết về điều đó! – MarcoS

+0

Nó từng là '\ b' trong những ngày MS-DOS cũ ... – Matthieu

2

Tôi nghĩ Java không tự nhiên cho phép điều đó. Bạn cần sử dụng một số thư viện vĩnh cửu. Có thể Java Curses Library có thể giúp bạn.

Các vấn đề liên quan