[英]User input does not work within a java thread. What am I doing wrong?
好的,我正在嘗試制作一個簡單的聊天服務器和客戶端。 該程序是聊天服務器。 我有兩個正在運行的線程。 第一個線程處理所有客戶端,並使用ServerSocket將每個新客戶端綁定到新套接字,而第二個線程現在允許用戶向連接的客戶端發送消息。 但是,我無法從該線程中獲取用戶輸入! 語句“ String inputvar = br.readLine()”將不會執行! 我究竟做錯了什么?
public void relay() throws IOException
{
new Thread(new Runnable()
{
@Override
public void run()
{
try{
try
{
while (true)
{
Socket socket2 = null;
Socket socket1 = socketmethod(socket2,0);
System.out.println(socket1);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (socket1 != null)
{
PrintWriter outputriver = new PrintWriter(socket.getOutputStream(),true);
boolean cfd = true;
while(cfd==true)
{
System.out.println("this worked");
System.out.print("Message: ");
String inputvar = br.readLine();
System.out.println("this worked2");
if (inputvar.equals("disconnect_now"))
{
cfd = false;
}
outputriver.println("Unknown User: " + inputvar);
}
}
}
}
finally
{
System.out.println("error 1");
}
}
catch (IOException e)
{
System.out.println("Unexpected error: IOException in thread2");
}
}
}).start();
我無法從您的代碼中得知您正在開始接受客戶端連接。 我希望看到這樣的事情...
public void replay() {
try {
serverSocket = new ServerSocket(port);
while(true) {
try {
final Socket connection = serverSocket.accept();
new Thread(new Runnable() {
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String value = br.readLine();
PrintWriter pw = new PrintWriter(connection.getOutputStream(), true);
pw.println(value);
但是,如果您接受具有多個線程的多個客戶端請求,則它們將在br.readline()上阻塞,因為它們爭奪System.in
還要確保您的輸入發送了正確的“換行”字符,以滿足readline()
要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.