我一直在閱讀 SwingUtilities.invokeLater() 方法,我在很大程度上理解它的目的。在處理 GUI 組件時,這些組件上的所有操作都需要在同一個 Event 線程上完成,以避免競爭等。然而,我認為很多問題都沒有展開,代碼實際上是如何工作的?看著它:SwingUtilities.invokeLater(new Runnable(){ public void run() { //method body code });我的問題是,這是如何工作的?我們正在過的invokeLater()方法的新的Runnable OBJ(我認為是的Runnable接口,無論如何,我們如何實例化一個構造函數new Runnable()?),然后附加整個方法體與它的方法調用中:{//Method body code});。這怎么可能?我從未見過將整個方法體作為其參數之一的方法。當我嘗試用我自己的方法復制它時,我收到錯誤,表明我無法在方法參數中提供整個方法主體。因此,我回到我最初的問題,這實際上是如何工作的。也許我多慮了/忽略了,但非常感謝任何幫助。
3 回答

精慕HU
TA貢獻1845條經驗 獲得超8個贊
除了其他答案之外,我還想補充一點。
用于理解您的 Java 代碼示例
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//method body code
}
);
了解 Java 編譯器如何實際處理它會很有幫助。編譯器做了以下兩件事:
它創建一個匿名類(以花哨的類名結尾$1或類似)實現Runnable接口:
class YourEnclosingClass$1 implements Runnable {
public void run() {
//method body code
}
}
然后它將這個匿名類與new操作符一起使用:
SwingUtilities.invokeLater(new YourEnclosingClass$1());

PIPIONE
TA貢獻1829條經驗 獲得超9個贊
我有,這是如何工作的?
您正在使用匿名類實現接口的run()方法Runnable。
你也可以這樣做:
Runnable run = new Runnable()
{
public void run()
{
//method body code
}
};
SwingUtilities.invokeLater( run );
添加回答
舉報
0/150
提交
取消