Java Process OutputStream ist null

Hallo.Ich habe folgendes Problem:
Ich will eine Software schreiben , die einen Minecraftserver steuert.
Diesen starte ich mit:
Java:
                       Process server;
                       ProcessBuilder pserver;
                       try {
				 
				 pserver = new ProcessBuilder("java", "-jar" ,  "server.jar" , "nogui");
				 server = pserver.start();
				 
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			 
			 OutputStream os = server.getOutputStream();			 
			 serverOutput  = new BufferedReader(new InputStreamReader(server.getInputStream()));
			 serverInput = new BufferedWriter(new OutputStreamWriter(os));
Nur das Problem ist , dass wenn ich über
Java:
serverInput.write("stop");
serverInput.newLine();
einen Befehl sende , bekomme ich eine NullPointerException die auf serverInput zeigt.Ich weiß nicht , was ich tuen soll
 
Ich muss dazu sagen, dass dies ein Server ist , der auf einem Linux System läuft , ich nicht so gut programmieren kann und ich den Code nicht kommentiere 😀
PS:Wenn ich einen Befehl sende , sieht dieser so aus:
SEND%IP%ARGUMENTE (Nur damit ihr euch nicht wundert):lol:
Java:
package tcpserver;

import java.io.BufferedReader; 
import java.io.BufferedWriter;
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket; 
import java.net.SocketException;
import java.nio.charset.Charset;
import java.util.List;

import Logger.Importance;
import Logger.Logger;


public class ServerProtokol {
	
	Socket s;
	BufferedReader vomClient;
	PrintWriter zumClient;
	Logger log = new Logger("log");
	
	public ProcessBuilder pserver;
	public Process server;
	public BufferedReader serverOutput;
	public BufferedWriter serverInput;
	
	public boolean show = true;
	public List<String> cmdline;
	
	public ServerProtokol(Socket s , Logger log) {
		
		try {
			
			this.s = s;
			
			vomClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
			
			zumClient = new PrintWriter(s.getOutputStream() , true);
			
			this.log = log;
			
		} catch(IOException e) {
			
			System.out.println("IO-Error");
			
			log.log(Importance.ERROR, "Fehler");
			
			e.printStackTrace();
			
		}
		
	}
	
	public void startServer() {
			

			 try {
				 
				 pserver = new ProcessBuilder("java", "-jar" ,  "server.jar" , "nogui");
				 server = pserver.start();
				 
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace(); 
			}
			 
			 OutputStream os = server.getOutputStream();			 
			 serverOutput  = new BufferedReader(new InputStreamReader(server.getInputStream()));
			 serverInput = new BufferedWriter(new OutputStreamWriter(os));
			 
			 show = true;
			 Thread t = new Thread() {
				 
				 
				 @Override
				 public void run() {
					 

					
					
					try {
						for( ; show == true ; ) {
						   String str;
						   str = serverOutput.readLine();
								if(str != null) {
						
						           if(str.contains("Done") && str.contains("For help, type")) {
							
							          zumClient.println("RUNNING");
							
						            }
						            
						//System.out.println(str);			
						
						          // cmdline.add(str);
						           
					              }
						}
						return;
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					

					
				}
					 				 
				 };
				 			 
			 t.start();


		
			return;
		
			 }
			 
	
	public void stopServer() {
		
			try {
				
				serverInput.write("stop");
				
				serverInput.newLine();
				
				serverInput.flush();
				
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
			System.out.println("STOPING...");
			
			for( ;; ) {
				
				String str;
				try {
					str = serverOutput.readLine();
					
					if(str.contains("Stopping server") && str.contains("[Server thread/INFO]")) {
						
						zumClient.println("STOPPED");
						
						show = false;
						
						return;
						
					}
					
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}

	}
	
	public void transact() {
		
					log.log(Importance.INFO, "Protokoll gestartet");
					
					System.out.println("Protokoll gestartet");
						
							try {
						
								if(s.isClosed()) {
									
									
									
								}
								
								log.log(Importance.INFO, "Client verbunden");
								
						System.out.println("Client verbunden");						
						
						String cmd = vomClient.readLine();
									
						//System.out.println("Command received");
						
						if(cmd.contains("LOGIN")) {
							
							String[] args = cmd.split("%");
							
							//System.out.println("USER " + args[1] + "> LOGIN");							
							
							//log.info("[" + args[1] + "]" + "LOGIN" + " User:" + args[2]);
							
							log.log(Importance.INFO, "[" + args[1] + "]" + "LOGIN" + " User:" + args[2]);
							
							//System.out.println("CLIENT " + args[1] + " HAS BUILT UP AN CONNECTION");
				
							/*System.out.println("Username:" + args[2]);
							
							System.out.println("Password Hash:" + args[3]);*/
							
							
							if(ServerMain.c.containsKey(args[2])) {
								
								//System.out.println("USERNAME ACCEPTED");
								
								if(ServerMain.c.getPwd5(args[2]).equalsIgnoreCase(args[3])) {
									
									zumClient.println("OK");
									
									//System.out.println("CLIENT ACCEPTED");
									
									log.log(Importance.INFO, "[" + args[1] + "]" + "Client akzeptiert");
									
									ServerMain.loggedOnIp = args[1];
									
								} else {
									
									//System.out.println("PASSWORD NOT ACCEPTED");
									
									zumClient.println("NOK");
									
									log.log(Importance.INFO, "[" + args[1] + "]" + "Client nicht akzeptiert");
									
									System.out.println("CLIENT NOT ACCEPTED");
										
									s.close();
									
								}
								
							} else {
								
								//System.out.println("USERNAME NOT ACCEPTED");
								
								zumClient.println("NOK");
								
								log.log(Importance.INFO, "[" + args[1] + "]" + "Client nicht akzeptiert");
								
								System.out.println("CLIENT NOT ACCEPTED");
									
								s.close();
								
							}
							

							
							//s.close();
							
						} else if(cmd.equalsIgnoreCase("exit")) {
							
									System.out.println("Protokollende");
									
									System.exit(0);
							
						} else if(cmd.contains("STATUS")) {
							
						/*	System.out.println("STATUS");
							
							zumClient.println("false");
						*/	
								String[] args = cmd.split("%");
							
								log.log(Importance.INFO, "[" + args[1] + "]" + "STATUS");
								
								if(ServerMain.loggedOnIp.equalsIgnoreCase(args[1])) {
									
									//Läuft der Server?
									
									zumClient.println("false");
									
								} else {
									
									s.close();
									
								}
							
						} else if(cmd.contains("DISCONNECT")) {
							
							String[] args = cmd.split("%");
							
							if(ServerMain.loggedOnIp.equalsIgnoreCase(args[1])) {
								
								ServerMain.loggedOnIp = null;
								
								log.log(Importance.INFO, "[" + args[1] + "]" + "Disconnect");
								
								System.out.println("USER DISCONNECT");
								
							} else {
								
								s.close();
								
							}
							
						}else if(cmd.contains("START")) {
							
							String[] args = cmd.split("%");
							
							if(ServerMain.loggedOnIp.equalsIgnoreCase(args[1])) {
								
								log.log(Importance.INFO, "[" + args[1] + "]" + "START");
								
								System.out.println("USER STARTED THE SERVER");
								
			                    	zumClient.println("true");		
								
			                    	startServer();
			                    	
							} else {
								
								s.close();
								
							}
							
						} else if(cmd.contains("STOP")) {
							
							String[] args = cmd.split("%");
							
							System.out.println("SERVER IS STOPPING");
							
							if(ServerMain.loggedOnIp.equalsIgnoreCase(args [1])) {
								
								stopServer();
								
								log.log(Importance.INFO, "[" + args[1] + "]" + "STOP");
								
								System.out.println("USER STOPPED THE SERVER");
								
							}
							
						}else if(cmd.contains("GETCMD")) {
							
							String[] args = cmd.split("%");
							if(ServerMain.loggedOnIp.equalsIgnoreCase(args [1])) {
								
								ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
								
								oos.writeObject(cmdline);
								
								System.out.println("cmdline sent");
								
								cmdline.clear();
								
							}
							
						}
						

							
						//System.out.println("Kein Befehl");
						
					} catch(SocketException e) {
						
						if(e.getMessage().equalsIgnoreCase("Connection reset")) {
							
							System.out.println("USER DISCONNECT");
							
							
							
						} else {
					
							e.printStackTrace();
						
						    System.out.println("IO-Fehler");
						    
						}

						

						
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
				}
				
		}
			
		
}
 
Ich hab mich ein bisschen im Code der BukkitUI "umgesehen":lol: und habe auch das kleine Plugin für den Server benutzt , das die Kommandozeile überwacht.Nur immer , wenn ich in den Stream des Servers(Der OutputStream) schreiben will , sagt er mir , dass dieser ein leeres Object ist.Gibt Process.getOutputStream() nichts zurück?
 

Neue Themen


Zurück
Oben