0

我想要完成的是从另一个线程设置一个文本字段。我的程序有一个按钮,当我单击它时,一个新线程开始运行,然后从套接字中获取一些东西,我想根据数据设置三个文本字段,但我做不到。我在我的主窗口类中编写了一个方法来进行.settext()调用,但我无法调用该方法,因为我什至没有对我的主窗口实例的引用。如何正确更新我的文本框。

还有一个小问题,我是否必须使我的组合框成为最终的,因为编译器会这样抱怨。

无法引用在不同方法 MainWindow.java 中定义的内部类中的非最终变量组合框

这是什么原因造成的?

public void run()
{
    os.print("INIT {ClassName USARBot."+type.name +"} {Location "+firstPos.x+" , "+firstPos.y+" ,"+firstPos.z+" } {Name "+robotName+"}\r\n");
    while (true)
        try
        {
            String str=is.readLine();
            String[] substr1=null;
            Position p = new Position();
            Scanner s=null;
            if(str.contains("{Type GroundTruth}"))
                substr1=str.split(" ");
                s=new Scanner(substr1[8]);
                p.x=s.nextDouble();
                p.y=s.nextDouble();
                p.z=s.nextDouble();
                s.close();
                //Here I want to set Textfields in MainWindow
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}
4

2 回答 2

1

正确答案来自“孤独的星云”(不能对您的评论进行投票或在此处发表评论)。

在这里您可以通过示例找到一个很好的解释SwingWorkerSwingWork 示例和解释
上周当我不得不解决与您相同的问题时,我想它有点复杂。

于 2013-05-26T00:17:18.767 回答
0

但是您评论的以下代码是:

SwingUtilities.invokeLater(new Runnable(){

    public void run(){
        someTextField1.setText("sometext1");
        someTextField2.setText("sometext2");
        someTextField3.setText("sometext3");
    }
});
于 2015-11-18T19:38:57.063 回答