在我的Java應用程序中,我有一個JTabbedPane
在主JFrame
與許多JPanel
選項卡。該選項卡中我有一個函數從SwingUtilities.InvokeLater調用獲取返回值?
public void newStatus(final String arg)
{
Runnable sendMsg = new Runnable()
{
@Override
public void run()
{
mainView.newStatusLine(arg);
}
};
SwingUtilities.invokeLater(sendMsg);
}
這個函數調用主JFrame mainView
函數寫一些文字到JTextPane
。我的問題是,這不允許我從主JFrame
獲得返回值。我想這樣做
public InfoObj getInfo()
{
Runnable sendMsg = new Runnable()
{
@Override
public void run()
{
return mainView.getInfo();
}
};
SwingUtilities.invokeLater(sendMsg);
}
但我不知道如何使這項工作。我嘗試過並遵循IDE的消息,看是否可以使用它,但我無法覆蓋Runnable.Run
以返回某些內容。
是否有任何機制可以做到這一點?
編輯:對於HoverCraftFullOfEels,整體問題是JPanels
之間,主JFrame
和JPanel
之間的談話。在某個時間點,JPanel
想告訴主要的JFrame
做些什麼,或者它可能想從中獲取一些數據。但是從我所知道的一切來看,我不能僅僅將this
的引用傳遞給JFrame
或JPanel
,並用它來調用公共函數或讀取某個公共字段。
有時候我想通過產生的線程在EDT上做這件事。一些JPanel
產卵線程,我想通過JPanel
的主要參考JFrame
,所以它可以調用它的函數告訴用戶有關線程正在做什麼。
這有可能是XY問題的味道。更好地告訴我們你想要解決的整體問題,而不是你想如何用代碼解決問題。另外爲什麼甚至在這裏將一個Runnable排隊在這裏?我認爲這個代碼已經被EDT調用過了,不是嗎? – 2014-09-03 02:47:07
**以後**的哪部分你不明白?該代碼尚未運行。 – SLaks 2014-09-03 02:49:21
通常返回您需要的東西['Callable'](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html)。 – 2014-09-03 02:54:19