Java UI White Screen после выполнения сетевого кода - PullRequest
0 голосов
/ 01 мая 2019

Я хочу реализовать сетевые функции в моей игре, однако у меня есть большая проблема.Когда я пытаюсь создать компонент JFrame, после выполнения сетевого кода он всегда отображается в виде белого экрана.Пока работает сеть, я никак не мог заставить работать интерфейс.Вот сетевой код:

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();
}

@Override
public 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;
}

private void initalizeServer() {
    try {
        serversocket = new ServerSocket(port, 8, InetAddress.getByName(ip));
    } catch (Exception e) {
        System.out.println("Error initalizing the server");
    }

    client = false;
}

public void listenServerRequest() {
    Socket s = null;

    try {
        s = serversocket.accept();
        os = new DataOutputStream(s.getOutputStream());
        is = new DataInputStream(s.getInputStream());
        accepted = true;
        System.out.println("The client successfully connected");
        base.showMain();
        mm.dispose();            
    } catch (IOException e) {
        System.out.println("Error");
    }
}

public void tick() {

}
}

jFrame работает отлично, если сетевой код не работал.Не работает следующее, которое вызывается в отдельном классе:

//the jFrame component initalizing all the UI elements inside
Main m = new Main(jTextField1.getText(),jComboBox1.getSelectedIndex());
//calls the NetworkController's beginServer() method, trying to establish 
//connection/start a server
nc.beginServer(jTextField2.getText(),this);

В чем проблема?

1 Ответ

0 голосов
/ 02 мая 2019

Разобрался. Пришлось сделать инициализацию потока вне этого запускаемого объекта, а затем запустить его как:

Thread t = new Thread(new Runnable() {...});
t.start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...