如何从方法中的匿名类中最好地返回值?

时间:2013-03-29 15:02:03

标签: java user-interface anonymous-class

如果我有一个需要返回某个东西的方法,并且需要在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以外的内容,这只是一个例子。

1 个答案:

答案 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;
}