如果我有一个需要返回某个东西的方法,并且需要在UI上显示某些内容(例如向用户询问一个问题),我会使用java.awt.EventQueue.invokeLater(new Runnable() {...});
在UI上运行它线程(Android使用runOnUiThread()
做类似的事情)。如何从Runnable
返回一些内容?例如:
public String askQuestion()
{
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
String response = JOptionPane.showInputDialog(null, "What is 2+2?");
//how do I return this response object to the method?
}
});
}
我无法使用最终的局部变量,因为编译将不允许我分配给它。我可以使用类变量并使用Class.this.<variable>
访问它,但这是实现此目的的最佳/唯一方法吗?
编辑:我还需要返回String
以外的内容,这只是一个例子。
答案 0 :(得分:3)
您可以按以下步骤操作:
public String askQuestion()throws Exception
{
final StringBuilder sBuilder = new StringBuilder();
java.awt.EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
String response = JOptionPane.showInputDialog(null, "What is 2+2?");
sBuilder.append(response);
}
});
return sBuilder.toString();
}
这也可以通过以下方式解决:
String sResponse;//make sResponse a field of class xyz
public String askQuestion()throws Exception
{
java.awt.EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
String response = JOptionPane.showInputDialog(null, "What is 2+2?");
sResponse = response;
}
});
return sResopnse;
}