java - 如何从另一个线程访问GUI

标签 java multithreading swing user-interface

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

还有一个小问题,我是否必须将组合框设为最终的,因为编译器会这样提示。

无法引用在不同方法 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();
        }
}

最佳答案

正确答案来自“孤独星云”(无法投票支持您的评论或在此处发表评论)。

在这里您可以找到对 SwingWorker 的很好的解释,并举例说明:SwingWork example and explanation
上周当我必须解决与你相同的问题时,我认为这有点复杂。

关于java - 如何从另一个线程访问GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752857/

相关文章:

java - Jackson JSON、不可变类和接口(interface)

iOS - 在哪个线程 ios 选择器运行

ios - 在主线程中使用完成处理程序设置后台操作的顺序

java.awt.Frame.setBackground(Color arg0) 不显示粉红色

java - 无法点击按钮

java - NIO 选择器 : How to properly register new channel while selecting

java - 保留提交的 JSP 表单数据

ios - 如何在不阻塞代码的情况下等待 BLE 回调

java - 仅显示 JTable 中的一列

java - 有没有办法让工具提示文本在单击时显示在按钮区域的随机位置?