Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing更新_Java_Swing_Class_Sockets_Tcp - Fatal编程技术网

Java Swing更新

Java Swing更新,java,swing,class,sockets,tcp,Java,Swing,Class,Sockets,Tcp,这是关于我之前的问题和建议。基本上,我遇到的问题是程序进入服务器类并停留在那里,因为服务器代码中有一段时间的外观,基本上一直在监听端口以获取客户端的任何响应;由于程序不在MainWindow类中,这使得主窗口完全不可访问 但我真正想让它做的是设置连接,然后返回到main窗口,这样屏幕上的按钮就可以点击了。或者,正如一张海报所建议的,我可以通过引用将MainWindow对象传递给服务器(我已经这样做了),然后使用SwingUtilities.invokeLater()。我希望将控制权交还给GUI,

这是关于我之前的问题和建议。基本上,我遇到的问题是程序进入
服务器
类并停留在那里,因为服务器代码中有一段时间的外观,基本上一直在监听端口以获取客户端的任何响应;由于程序不在
MainWindow
类中,这使得主窗口完全不可访问

但我真正想让它做的是设置连接,然后返回到
main窗口
,这样屏幕上的按钮就可以点击了。或者,正如一张海报所建议的,我可以通过引用将MainWindow对象传递给服务器(我已经这样做了),然后使用
SwingUtilities.invokeLater()。我希望将控制权交还给GUI,以便用户可以单击按钮等


当它返回到
主窗口时
,我仍然需要连接保持活动状态,以便客户端可以发送东西,我可以接收它,并在屏幕上显示接收到的内容供用户控制。

基本上,您可以使用
SwingWorker
在后台执行操作,脱离事件调度线程,这将允许您的应用程序继续工作

SwingWorker<Server , Object> worker = new SwingWorker<Server , Object>() {
    @Override
    protected ServerdoInBackground() throws Exception {
        Server server = new Server();
        //...
        // Use publish(...) to send information
        // back the EDT via the process method...
        return server;
    }

    @Override
    protected void done() {
        try {
            Server server = get();
        } catch (InterruptedException | ExecutionException ex) {
            ex.printStackTrace();
        }
    }

    @Override
    protected void process(List<Object> chunks) {
        // You can safly update the UI from here, maybe
        // with some messages??
    }

};
worker.execute();

查看更多详细信息

以及使用a与服务器对话有什么问题?@MadProgrammer那么我会使用
主窗口
类中的SwingWorker,以便单独设置连接吗?我不太清楚SwingWorker是如何工作的…即使在阅读了文档之后…@MadProgrammer,所以如果我理解正确,我似乎会设置这样一个对象:
SwingWorker-worker=new SwingWorker…
,其中包含需要在此worker对象内执行的函数。但是,服务器是一个完整的类,因此如何将其封装到SwingWorker对象中?
Server server = ...;
ConnectionWorker worker = new ConnectionWorker(server);
worker.execute();

//...

public class ConnectionWorker extends SwingWorker<Object, Object> {

    private Server server;
    public ConnectionWorker(Server server) {
        this.server;
    }

    @Override
    protected ServerdoInBackground() throws Exception {
        server.doStuff(); //...
        return ...;
    }

}