[英]Console windows, similar to windows “cmd.exe”
我最近編寫了一個“戰艦”程序的代碼,現在正忙於提高用戶友好度(如果這是英語中^^的合適詞)。 考慮到您可以啟動服務器,我想添加某種服務器控制台,您可以在其中獲取狀態報告(例如,“ Player 1已連接”),並可以鍵入命令(例如“ stop”)以關閉服務器。
現在,不幸的是,瀏覽了多個Google搜索結果和stackoverflow帖子后,我的印象是,沒有類似於Windows命令行(cmd.exe)的訪問控制台窗口的簡便方法-是正確的嗎? 顯然,我可以創建一個JFrame,其中一個JTextField用於輸入,一個不可編輯的JTextArea用於輸出,但是考慮到我使用System.out.println()
打印的大部分內容,我覺得那不是很優雅應該在那里出現。
有任何想法嗎 ...?
JTextArea
和JTextField
的“控制台”有多常見? 如果以Minecraft為例,您會發現帶有用於輸入下一條命令的JTextField
的JFrame
和不可編輯的JTextArea
實際上很常見。
您甚至可以通過調用System.setOut()
將其設置為您自己的PrintStream
來攔截System.out.println()
或實際上對System.out
任何使用,從而將文本附加到上述JTextArea
。
但是,有一些事情要考慮。
當將JFrame
和JTextField
和JTextArea
用於服務器控制台時,服務器無法在無頭環境中運行。 正確的服務器可以在沒有GUI的無頭環境中運行,可以使用諸如init.d
(也可以作為Windows服務運行)之類的相應基礎結構在服務器操作系統上啟動。
這並不意味着您根本無法使用Swing。 但是您應該考慮策略設計模式,並讓用戶控制是為服務器啟動Swing UI,還是應僅使用stdin
和stderr
。 對於用戶來說,Swing UI也將更加困難。 他們可以簡單地通過腳本將命令序列通過管道自動發送到stdin
。 使用圖形用戶界面,這種自動化變得更加困難。
當將stdin
/ stderr
用於服務器控制時,您可能希望通過使用模擬GNU readline某些行為的readline庫來使用戶感到舒適。
System.out
用於日志記錄。 請改用System.err
。 使用System.out
進行日志記錄是一個常見錯誤。 但這不是System.out
目的。 System.out
( stdout
)用於程序的輸出。 例如,這就是ls
或dir
打印當前目錄文件的地方。 不包含程序主要輸出的消息應放在System.err
。
您想要實現的某些功能可能已在日志記錄框架中提供。 Java附帶了一個java.util.logging
,還有更多的框架供您參考。 簡單地打印到System.err
或什至更糟糕的System.out
,被認為是一種非常弱的,差勁的日志記錄形式,而復雜的應用程序很快就超出了對日志記錄的需求,從而使System.err
變得不盡人意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.