【问题标题】:how to get variable value from a java thread如何从java线程获取变量值
【发布时间】:2017-07-25 14:03:52
【问题描述】:

我有一个线程计算一些东西并生成一个二维数组。当线程完成时,我需要访问这个二维数组的值。我该怎么做呢

        SwingWorker<Integer, Void> worker = new SwingWorker<Integer, Void>()
        {
            Object[][] valueMatrix = null;

            @Override
            public Integer doInBackground()
            {
                try
                {
                    valueMatrix = doChemicalSynonyms(termsArray_1, termsArray_2, mView.getSaveFilepath(), false, mView.getSheetName(), mView.getCategoryName(), mView.includePMIDs());
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                    return -1;
                }
                return 0;
            }

            @Override
            public void done()
            {
                System.out.println(valueMatrix[0][0]);
            }
        };
        worker.execute();

doChemicalSynonyms 函数生成 valueMatrix。线程完成后如何从主类(类似于全局变量)访问它

【问题讨论】:

  • 取决于工人的实施位置。如果它是同一个类,你实际上可以使它成为一个成员变量。
  • 查看documentation。有几种方法可以做到这一点。在收到DONE 属性更改的通知后,您可以致电get()
  • 你能举个例子吗?
  • SwingWorker类的参考文档中有一个例子,Swing教程中有一些其他的。

标签: java swing swingworker


【解决方案1】:

您应该做的是使用done() 方法从线程收集任何结果。基本上你现在打印第一个值的地方,你可以把它转移到另一个线程在那里使用它。

注意 done() 在 EDT 中被调用,因此如果您需要对其进行密集操作,则需要另一个线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2016-02-21
    • 1970-01-01
    • 2011-01-17
    • 2014-05-01
    • 2014-12-08
    • 2018-11-10
    相关资源
    最近更新 更多