Tôi đã làm việc về vấn đề này trước đây. Tôi sử dụng một vài kỹ thuật khác nhau. Tuy nhiên rất khó để có một giải pháp nền tảng thực sự.
Tôi đã thử làm thử một cái gì đó như thế này:
String os = System.getProperty("os.name").toLowerCase();
//Windows
if(os.contains("win")){
System.out.append("Windows Detected");
//set Windows Dos Terminal width 80, height 25
Process p = Runtime.getRuntime().exec("mode 80, 25");
}
//Mac
if(os.contains("mac")){
System.out.println("Macintosh Detected");
//... I dont know...try Google
}
//Linux
if(os.contains("linux")){
System.out.println("Linux Detected");
Bạn có thể đọc/kiểm tra và thêm "COLUMNS xuất khẩu" vào file .bashrc trong mỗi thư mục Linux người dùng gia đình với String.contains ("COLUMNS xuất khẩu ") và thuộc tính user.dir.
Điều đó sẽ cho phép bạn tải các cột lên mỗi khi ứng dụng java khởi động.
Sau đó, tôi sẽ chuyển nó sang tệp tạm thời. Như thế này:
try {
ProcessBuilder pb = new ProcessBuilder("bash","-c","echo $COLUMNS >/home/$USER/bin/temp.txt");
pb.start();
}catch (Exception e) {
System.out.println("exception happened - here's what I know: ");
e.printStackTrace();
System.exit(-1);
}
}
Một tùy chọn khác bạn có là thực thi yor Java.jar với tập lệnh bash khi khởi động. Bên trong kịch bản, bạn có thể sử dụng "tput cols" để có chiều rộng. Sau đó chuyển giá trị đó cho ứng dụng Java của bạn dưới dạng String [] arg.
Giống như vậy:
//#!/bin/bash
//#clear the screen
clear
//#get the console width and height
c=$[$(tput cols)]
l=$[$(tput lines)]
//#pass the columns, lines and an optional third value as String[] args.
java -jar ~/bin/Plus.jar $c $l $1
tại sao là một nhiệm vụ khó khăn như thế này với Java? Rõ ràng là một nơi tốt để viết một API tốt. Tôi đoán chúng ta có thể thử Apache.commons.exec?
Tôi đã hy vọng sẽ có một cái gì đó mà sẽ trở lại chiều rộng/chiều cao vv hoặc -1 nếu nó không thể được xác định ... oh well. Chào mừng các hằng số được mã hóa cứng! – masher
@ masher: vấn đề là trên Linux, câu trả lời sẽ gần như luôn luôn là "không thể được xác định với bất kỳ sự chắc chắn nào". –
Tôi đã cố gắng thực hiện việc này với Hệ thống.getenv ("COLUMNS") nhưng nó trả về null. Ubuntu 10.04/GNOME 2.30.2 – jsj