Tôi đang thiết kế ứng dụng bảng điều khiển cho máy chủ chạy RedHat. Người dùng cuối sẽ có thể chạy ứng dụng này với bất kỳ thiết bị đầu cuối nào mà họ chọn. (Ví dụ: Gnome Terminal, Putty SSH/Telnet, MS Telnet Client và những người khác).Cài đặt Môi trường cho System.in
Trong hầu hết các ứng dụng đầu cuối không có gì sai, tuy nhiên khi tôi khởi chạy chương trình từ phiên telnet MS, tôi nhận thấy đầu vào đặc biệt của mình cho System.in
và System.console()
hoàn toàn bị rối loạn. Một backspace sẽ viết ^H
vào màn hình và các phím khác cũng viết sai ngữ pháp.
Tôi đã hack vào nó đủ để tôi có thể lấy nó để liên tục làm việc, nhưng tôi chắc chắn những gì tôi đang làm là tổng:
if (!System.getenv("TERM").equals("xterm"))
{
System.out.println("\nWARNING: The TERM type is now set to xterm\n");
final String[] cmd = { "/bin/sh", "-c", "export TERM=xterm" };
Runtime.getRuntime().exec(cmd);
}
Nên có một vấn đề ở đây cho thiết bị đầu cuối mà don Không hỗ trợ xterm
? Tôi nhận thấy rằng ứng dụng Microsoft Telnet không cho phép bạn đặt loại TERM
thành xterm
trước khi bạn bắt đầu phiên. Tuy nhiên, khi phiên được bắt đầu, việc đặt TERM=xterm
có vẻ như sẽ giải quyết được sự cố.
Hầu hết các ứng dụng giao diện điều khiển đều gặp vấn đề này như thế nào?
Có thể là ngữ pháp của bạn là các trình tự thoát ansi. Http://stackoverflow.com/questions/16755142/how-to-make-win32-console-recognize-ansi-vt100-escape-sequences?lq=1 –
nhìn ở đó : https://github.com/fusesource/jansi Jansi là một thư viện java nhỏ cho phép bạn sử dụng các chuỗi thoát ANSI để định dạng đầu ra bàn điều khiển của bạn hoạt động ngay cả trên các cửa sổ. –
@AndreasFrische oh wow có vẻ đầy hứa hẹn! sẽ phải chơi đùa với nó! – flakes