簡體   English   中英

System.out.println無法正常運行

[英]System.out.println not functioning

在什么情況下,java的System.out.println將無法生成任何輸出。 我在一個方法內部調用它,有時當調用該方法時,我得到println,而不是我得到的othertimes。

更新:我也在println之后使用System.out.flush()。

更新:感謝您的調試幫助。 事實證明,打開一個對話框的阻塞調用使輸出顯示出正常的順序。 我認為當對話框關閉時,我正在嘗試打印消息的方法被調用,但方法本身就是調用對話框的內容,因此在關閉之后它已經超過打印輸出,這是我開始尋找測試的地方。 如果某人有能力刪除此問題,因為問題不是最初提出的問題,我們將不勝感激。

我以前從未見過這種情況。 從理論上講,當輸出不在你預期的位置時,它只會“失敗”。 輸出目標可以使用System#setOut()進行更改。

某些平台上的System.out.println使用緩沖輸出。 根據您的代碼執行的操作,可能在程序退出之前不刷新緩沖區。 嘗試在println之后放入System.out.flush()並查看是否有幫助。

編輯:

有時當調用該方法時,我會得到println,而不是我得到的othertimes

你如何驗證方法被調用但println沒有產生輸出? 您的方法是否有可能在它到達println之前拋出異常(然后被吞下)?

當然,看到一些實際的代碼會非常有幫助。

你在哪里檢查輸出? System.out可能已被重定向到其他地方,所以也許你正在尋找錯誤的地方。

根據@ BalusC的建議回答 -

感謝您的調試幫助。 事實證明,打開一個對話框的阻塞調用使輸出顯示出正常的順序。 我認為當對話框關閉時我正在嘗試打印消息的方法被調用,但方法本身就是調用對話框的內容,因此在關閉之后它已經通過打印輸出,這是我開始尋找測試的地方。 如果某人有能力刪除此問題,因為問題不是最初提出的問題,我們將不勝感激。

System.out.println是緩沖輸出,如果你不刷新緩沖區,它可能似乎“等待”直到程序結束。 有時,程序可能會在刷新緩沖區之前死亡。 System.out.flush()將強制刷新輸出。

文件句柄可能已更改。 即, stdout的文件描述符不再是1 我已經在日志記錄實用程序中看到了這一點,人們不想去捕獲任何可能打印到文件描述符的文本,因此他們只是將流重定向到打開文件的文件句柄。

這是python中的一個例子:

import sys

h = open(r"C:\foo.txt","a+")

sys.stdout = h
sys.stdout.write("hey fellas")

h.close()

在cmdline上運行它,你不會像你期望的那樣打印出“嘿fellas”。 相反,它將被重定向到文件C:\\ foo.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM