2012-06-28 43 views
2

我正在運行一些在迴轉工作室打印輸出的代碼。我沒有得到打印輸出,所以我用SwingUtilities.invokeLater現在它工作。我沒有想到這個結果,這是怎麼發生的?我本以爲System.out.println可以運行在美國東部時間之外。system.out.println是否必須在edt上?

+1

還有其他的錯誤。 System.out.println(...)不關心它被調用的線程,只需要在Swing事件線程上調用* Swing *方法調用。 –

+2

nooo System.out.println ...這是所有邪惡的根源,也是醜陋的地獄。您可以在java中至少3個易於安裝的輕量級日誌記錄框架之間進行選擇。 (slf4j,log4j,logback等) –

+1

沒有發佈代碼,你不會得到更好的幫助。 –

回答

2

那將是很容易測試(不說,連打字所有的代碼來測試,這是較少的工作,然後在這裏張貼):

import java.awt.EventQueue; 
public class HelloWorld { 
    public static void main(String[] args) { 
    System.out.println("Hello world"); 
    System.out.println(EventQueue.isDispatchThread()); 
    } 
} 

結果

Hello world 
false 

在控制檯上。

所以,是的,System.out.println可以在EDT

1

我會想到systemystem.out.println可以在edt之外運行。

的確如此。爲了測試這一點,創建一個線程,您可以在其中放置循環和打印輸出並自己查看:)

0

System.out.println確實在edt之外運行。當您使用迴轉工具運行時,您會將其運行。從理論上講,您應該始終能夠直接從您的代碼塊打印結果。 我建議:

Runnable runnable = new Runnable() { 

     public void run() { 

     } 
    }; 
SwingUtilities.invokeLater(runnable); 
0

之外使用雖然可以,它已經調試之外很少應用。

一個備用輸出的例子是的JOptionPane:

JOptionPane.showMessageDialog(frame/* sets up the message, can also be replaced with null to remove formatting*/, 
"Eggs are not supposed to be green."/* this is your main message*/, 
"A plain message"/* this is what shows in the title spot (first parameter must not be null)*/, 
JOptionPane.PLAIN_MESSAGE/*shows no icon, also replacable with WARNING_MESSAGE, ERROR_MESSAGE, INFORMATION_MESSAGE*/); 

都將在同一行,但我把它弄壞了起來這裏格式化 一個行版本:

JOptionPane.showMessageDialog(frame/* sets up the message, can also be replaced with null to remove formatting*/, "Eggs are not supposed to be green."/* this is your main message*/, "A plain message"/* this is what shows in the title spot (first parameter must not be null)*/, JOptionPane.PLAIN_MESSAGE/*shows no icon, also replacable with WARNING_MESSAGE, ERROR_MESSAGE, INFORMATION_MESSAGE*/); 

無評論:

JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.", "A plain message", JOptionPane.PLAIN_MESSAGE); 

有趣的是,蘇斯博士在你的節目中引用。

相關問題