Ich programmiere einen Server mit Java mit mehreren Threads, kaufe sehr früh einen sehr seltsamen Fehler.Println und Threads in Java
Hier ist mein Code:
package net.twh;
import java.net.DatagramSocket;
import java.util.Scanner;
public class Server {
public static EntryThread entry;
public static ServerPhases phase;
public static DatagramSocket serverSocket;
public static boolean stopProgram;
public static Scanner keyboard;
public static void main(String[] args) {
Configuration.port = 17550;
keyboard = new Scanner(System.in);
entry = new EntryThread();
entry.run();
while (!stopProgram)
{
String line = "";
System.out.printf("> ");
line = keyboard.next();
System.out.printf(line);
if (line == "close")
{
entry.stop = true;
stopProgram = true;
}
}
}
}
Und hier ist mein Thread:
package net.twh;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class EntryThread extends Thread {
public boolean stop;
public EntryThread() {
stop = false;
}
public void run() {
Runtime.getRuntime().addShutdownHook(new Thread(){public void run(){ // AUTOCLOSE NE PAS SUPPRIMER !!!!!
try {
Server.serverSocket.close();
System.out.println("The server is shut down!");
} catch (Exception e) { /* failed */ }
}});
try {
Server.serverSocket = new DatagramSocket(Configuration.port);
byte[] receiveData = new byte[8];
System.out.printf("Listening on udp:%s:%d%n",
InetAddress.getLocalHost().getHostAddress(), Configuration.port);
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);
while(!stop) {
Server.serverSocket.receive(receivePacket);
byte[] data = receivePacket.getData();
System.out.println("RECEIVED: " + new String(data));
InetAddress IPAddress = receivePacket.getAddress();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Die Nachricht, wenn ein Paket funktioniert und die Scanner funktioniert recieving, aber die ">" und Zeichenfolge eingegeben i ‚Doesn t auftauchen.
Ich glaube, das die Nutzung von System.out.printf sein könnte, anstatt println –
Du den Thread nicht starten, werden Sie nur die Ausführung der 'run()' Methode der Thread nacheinander. Der richtige Weg, um einen Thread zu starten, lautet 'entry.start()' anstelle von 'entry.run()'. – JMSilla
@JMSilla Wenn du das als Antwort postest, werde ich es aufwerten. –