字符串不通过PrintWriter

时间:2018-03-13 15:19:08

标签: java minecraft

我的问题是,出于某种原因,每当我想将字符串传递给服务器控制台时,服务器什么也得不到。我已尝试通过调试来跟踪它,但我无法找到问题。我将PrintWriter从MCSERVERPROZESS传递到SERVER Runnable,我要通过的字符串不是null。以下是代码:

public class MCSERVERPROZESS extends Thread {

private SERVERGUI servergui = null;
private SERVER server = null;
private String serverPath = "/home/mint/mc_server";
private ProcessBuilder builder = new ProcessBuilder("java", "-Xmx1024M", "-Xms1024M", "-jar", "server.jar", "nogui");   


public MCSERVERPROZESS(SERVER server, SERVERGUI servergui) throws IOException {
    this.servergui = servergui;
    this.server = server;
}

@Override
public void run() {
    try {
        builder.directory(new File(serverPath));
        final Process pr = builder.start();

        OutputStream stdin = pr.getOutputStream();
        InputStream stderr = pr.getErrorStream();
        InputStream stdout = pr.getInputStream();

        BufferedReader in = new BufferedReader(new InputStreamReader(stdout));

        this.server.setProcessOutputStream(new PrintWriter(stdin));


        String serverOutputText;

        do {
            serverOutputText= in.readLine();
            this.servergui.updateServerArea(serverOutputText+ "\n");
        } while (serverOutputText.contains("Stopping server"));                    
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public class SERVER implements Runnable {

private SERVERGUI servergui = null;
private int port = 10001;
private ServerSocket serverSocket = null;
private BufferedReader in = null;
private PrintWriter out = null;
private MCSERVERPROZESS mcserver = null;
//private Socket clientSocket = null;

private ArrayList<CLIENTPROZESS> clients = new ArrayList<>();

public SERVER(int Port, SERVERGUI server) throws IOException {
    this.servergui = server;
    this.port = port;
}

public void run() {
    try {            
        mcserver = new MCSERVERPROZESS(this, this.servergui);
        mcserver.start();
        servergui.setServer(this);
        startServer();
    } catch (IOException e) {
        e.printStackTrace();
    }
}


public void startServer() throws IOException {
    this.serverSocket = new ServerSocket(port);
    while(true) {
        waitForConnection();
    }
}

public void waitForConnection() throws IOException {
    Socket clientSocket = serverSocket.accept();
    this.startConnection(clientSocket);
}

public synchronized void startConnection(Socket s) throws IOException {
    new CLIENTPROZESS(s, this).start();
}

void setProcessOutputStream(PrintWriter pw) {
    this.out = pw;
}

void sendTextToConsole(String s) throws IOException {
    out.write(s);
    System.out.println(s);
}

SERVER.sendTextToConsole用于通过String管道到控制台。

0 个答案:

没有答案