【发布时间】:2014-10-27 10:18:11
【问题描述】:
在我的 java 应用程序中,我在主 JFrame 上有一个 JTabbedPane,并带有许多 JPanel 选项卡。在标签中我有一个功能
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 产生线程,我想将JPanels 引用传递给主JFrame,以便它可以调用其中的函数来告诉用户线程正在做什么。
【问题讨论】:
-
这闻起来可能是 XY 问题。更好地告诉我们您要解决的总体问题,而不是您尝试使用代码解决问题的方式。另外,为什么还要在这里在 EDT 上排队 Runnable?我认为这段代码已经被 EDT 调用了,不是吗?
-
稍后的哪一部分你不明白?该代码尚未运行。
-
一般是返回你需要的东西
Callable. -
基本上,你不能......你能做的就是设置某种observer pattern
-
@PM77-1:但如果它在事件线程上排队,那将不起作用。然后它将表现为 Runnable。