2011-02-03 294 views
9

Lệnh nào trong Java sẽ cho phép bạn xóa bảng điều khiển trong ứng dụng dòng lệnh?lệnh trong java để xóa màn hình

+2

Vui lòng làm rõ. Màn hình gì? Bàn điều khiển? –

+2

màn hình nào? –

Trả lời

8

Nó phụ thuộc vào giao diện điều khiển của bạn, nhưng nếu nó hỗ trợ ANSI escape sequences, sau đó thử này ..

final static String ESC = "\033["; 
System.out.print(ESC + "2J"); 
+1

Một cái gì đó như thế này có lẽ là đặt cược tốt nhất của bạn, vì tôi không nghĩ rằng có một giải pháp Java thực (+1) –

+0

ok cảm ơn bệnh cho bạn biết nếu nó hoạt động – chriss

+0

mà didnt làm việc bạn biết bất kỳ cách nào khác – chriss

1

Luôn luôn có sự rõ ràng (và kludgy) ..

int numRowsInConsole = 60; 
for (int ii=0; ii<numRowsInConsole; ii++) { 
    // scroll down one line 
    System.out.println(""); 
} 
2

Xoá một màn hình thường đòi hỏi gửi các chuỗi điều khiển đặc biệt cụ thể cho màn hình/thiết bị đầu cuối mà ứng dụng của bạn đang chạy. Tùy chọn:

  1. Nếu bạn biết bạn sẽ luôn chạy dưới một thiết bị đầu cuối cụ thể và có thể tìm thấy trình tự điều khiển thích hợp để xóa màn hình cho thiết bị đầu cuối đó, chỉ cần xuất các trình tự đó. Nếu bạn cho chúng tôi biết màn hình, chúng tôi có thể cho bạn biết trình tự (có khả năng tương thích ANSI/VT100/VT220).

  2. Đảm bảo bên ngoài ứng dụng của bạn luôn chạy trong một thiết bị đầu cuối mong muốn, ví dụ: một tập lệnh để khởi động ứng dụng của bạn sẽ khởi động ứng dụng trong thiết bị đầu cuối mong muốn. Sau đó xuất chuỗi ký tự cần thiết để xóa màn hình.

  3. Kiểm soát thiết bị đầu cuối bằng cách sử dụng thư viện mô phỏng thiết bị đầu cuối, tức là ứng dụng của bạn hiện là ứng dụng cửa sổ tạo màn hình cửa sổ đầu cuối để người dùng sử dụng. Sau đó, bạn kiểm soát thiết bị đầu cuối nào bạn đang mô phỏng và sẽ biết những trình tự điều khiển nào là cần thiết.

  4. Sử dụng thư viện thiết bị đầu cuối (ví dụ như thư viện lịch sử curses) phát hiện thiết bị đầu cuối và cung cấp giao diện đồng nhất cho các tính năng của thiết bị. Xem câu hỏi này:

    What's a good Java, curses-like, library for terminal applications?

  5. Fake nó bằng cách viết một loạt các dòng màn hình.

3

Chạy chương trình mẫu này: nó thể hiện cách xóa bảng điều khiển bằng chuỗi thoát và định vị lại con trỏ đến vị trí X = 1, Y = 1.

Tôi đã thử nghiệm trên một số thiết bị đầu cuối Linux. Không biết, nếu nó hoạt động trong Windows.
lẽ bạn có thể cho tôi biết;)

đọc this article về trình tự thoát.

import java.io.*; 

public class Main { 

public static final char ESC = 27; 

public static void main(String[] args) 
     throws Exception { 
    Console c = System.console(); 
    if (c == null) { 
     System.err.println("no console"); 
     System.exit(1); 
    } 

    // clear screen only the first time 
    c.writer().print(ESC + "[2J"); 
    c.flush(); 
    Thread.sleep(200); 

    for (int i = 0; i < 100; ++i) { 
     // reposition the cursor to 1|1 
     c.writer().print(ESC + "[1;1H"); 
     c.flush(); 

     c.writer().println("hello " + i); 
     c.flush(); 

     Thread.sleep(200); 
    } 
} 

} 
+0

Tôi thích tập lệnh. Tôi sẽ biết liệu có cách nào để đặt văn bản của bàn điều khiển vào biến trước khi xóa bảng điều khiển và sau đó khôi phục bảng điều khiển về trạng thái trước đó trước đây? Có thể làm điều gì đó như 'buffer = System.out; ' ' System.out.print (ESC + "[1; 1H"); ' ' System.out.flush(); ' ' System.out.println ("Lorem ispum ...."); ' ' System.out.print (ESC + "[1; 1H"); ' ' System.out.flush(); ' ' System.out.println (buffer); ' – maan81

+0

Rất tiếc, không biết cách thực hiện nhận xét nhiều dòng. – maan81

+0

@ maan81 Đáng buồn thay, không có cách nào để "lưu trữ" và "khôi phục" System.out. Nó chỉ là một dòng.Khả năng giao diện điều khiển của Java là * rất * giới hạn. –

16

Tôi nghĩ điều OP muốn xóa màn hình và di chuyển con trỏ đến vị trí chính. Ví thử rằng:

 final String ANSI_CLS = "\u001b[2J"; 
     final String ANSI_HOME = "\u001b[H"; 
     System.out.print(ANSI_CLS + ANSI_HOME); 
     System.out.flush(); 
+0

Làm việc tốt cho tôi, cảm ơn. – electrotype

-1

Có hai cách rất đơn giản để giải quyết việc này, đầu tiên là lựa chọn brute force:

for (int i=1; i<=10; i++) 
    System.out.println("\n"); 

Vấn đề này tuy nhiên là nó chỉ giả xóa màn hình, bạn có thể cuộn lên để xem dữ liệu, nhưng đừng sợ, có một cách khác!

System.out.println("\f"); 

Thì đấy! Điều đó sẽ thực hiện thủ thuật, mặc dù con trỏ của bạn sẽ nằm trên dòng thứ hai của bảng điều khiển sau khi màn hình bị xóa.

+1

Điều gì xảy ra nếu bảng điều khiển có chiều dài lớn hơn mười dòng? –

+1

Thêm một số dòng khác – diegoaguilar

0
System.out.println("Hello!"); 

in chuỗi đã chỉ định và sau đó di chuyển con trỏ đến dòng tiếp theo.

System.out.print("Hello!"); 

in chuỗi đã chỉ định và để con trỏ ngay sau chuỗi đó.

Để giải quyết vấn đề, được xác định ở trên, của con trỏ nằm trên dòng thứ hai của bảng điều khiển, hãy sử dụng print thay vì println.

0

Tôi đã làm điều này trong BlueJ và nó hoạt động hoàn hảo: Hãy thử System.out.print ("\ f");

0

thanh toán bù trừ cho bash đó là làm việc cho tôi:

System.out.print(String.format("\033[H\033[2J")); 
0

Theo hiểu biết của tôi Command Window Windows 10 của cmd.exe không natively hỗ trợ chuỗi ANSI ESC, bất chấp những tin đồn. Để có:

final String ANSI_CLS = "\u001b[2J"; 
System.out.print(ANSI_CLS); 

phương pháp làm việc bạn cần trình mô phỏng dòng lệnh hỗ trợ ANSI, chẳng hạn như ConEmu64.

0

Nếu không ai trong số các giải pháp trên làm việc cho bạn (như trong trường hợp của tôi), hãy thử giải pháp này:

new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); 

Tôi đang sử dụng Windows 8 và giải pháp này làm việc cho tôi. Hy vọng nó sẽ làm cho bạn là tốt. :)

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