为了账号安全,请及时绑定邮箱和手机立即绑定

网络代码执行后的 Java UI 白屏

网络代码执行后的 Java UI 白屏

翻翻过去那场雪 2022-11-02 15:55:50
我想在我的游戏中实现网络功能,但是我有一个很大的问题。当我尝试创建 JFrame 组件时,在执行网络代码后,它总是显示为白屏。虽然网络工作正常,但我无法让 UI 以任何方式工作。这是网络代码:package progtech2bea;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;public class NetworkController implements Runnable {public Main base;private MainMenu mm;private String ip;private int port = 22222;public int pnum;private Thread thread;private Socket socket;private DataOutputStream os;private DataInputStream is;private ServerSocket serversocket;private int errcount = 0;private boolean commerror;private boolean client;private boolean accepted = false;public void beginServer(String ip, MainMenu mm){    this.ip = ip;    this.mm = mm;    if (!connect()) {        initalizeServer();        pnum = 1;    }    else    {        pnum = 2;    }    thread = new Thread(this, "WaterWar");    thread.run();}@Overridepublic void run() {    while (true) {        tick();        //m.repaint();        if (!client && !accepted) {            listenServerRequest();        }    }}private boolean connect() {    try {        socket = new Socket(ip, port);        os = new DataOutputStream(socket.getOutputStream());        is = new DataInputStream(socket.getInputStream());        accepted = true;        mm.dispose();        base.showMain();        base.moveToP2StartView();        System.out.println("Successfully connected");    } catch (IOException e) {        System.out.println("No active server, initalizing new one");        return false;    }    return true;}如果网络代码没有运行,jFrame 工作得非常好。以下不起作用,它在单独的类中被调用://the jFrame component initalizing all the UI elements insideMain m = new Main(jTextField1.getText(),jComboBox1.getSelectedIndex());//calls the NetworkController's beginServer() method, trying to establish //connection/start a servernc.beginServer(jTextField2.getText(),this);有什么问题?
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

弄清楚了。必须在这个可运行对象之外进行线程初始化,然后将其运行为:

Thread t = new Thread(new Runnable() {...});
t.start();


查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 204 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号