Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 帮助我修复这个线程示例中的一个bug_Java_Exception Handling - Fatal编程技术网

Java 帮助我修复这个线程示例中的一个bug

Java 帮助我修复这个线程示例中的一个bug,java,exception-handling,Java,Exception Handling,我正在尝试创建一个线程来简单地将文本发送到客户端。但是,如果将此代码复制到IDE,您将看到client.getOutputStream()下有一条红色下划线。我不知道这里出了什么问题。IDE显示“未处理的异常类型IOException”。有人能告诉我吗 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import

我正在尝试创建一个线程来简单地将文本发送到客户端。但是,如果将此代码复制到IDE,您将看到client.getOutputStream()下有一条红色下划线。我不知道这里出了什么问题。IDE显示“未处理的异常类型IOException”。有人能告诉我吗

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class ServerStudentThread extends Thread {
  Socket client; 

  public ServerStudentThread(Socket x) {  
    client = x;  
  }

  public void run() {
    // create object to send information to client
    PrintWriter out = new  PrintWriter(client.getOutputStream(),true);

    out.println("Student name: ");//send text to client;
  }
}
以下是调用线程的代码供参考

import java.io.*;
import java.net.*;
import java.util.*;

public class Server2 {
  public static void main(String args[]) throws Exception {
    int PORT = 5555;      // Open port 5555

    //open socket to listen
    ServerSocket server = new ServerSocket(PORT);
    Socket client = null;

    while (true) {
      System.out.println("Waiting for client...");

      // open client socket to accept connection
      client = server.accept();

      System.out.println(client.getInetAddress()+" contacted ");
      System.out.println("Creating thread to serve request");

      ServerStudentThread student = new ServerStudentThread(client);
      student.start();
    }
  }
}

可能是getOutputStream()会抛出异常,而您无法捕获它,请尝试在代码块周围放置一个try/catch(IOException e)

public void run() {
    try {
        // create object to send information to client    
        PrintWriter out = new  PrintWriter(client.getOutputStream(),true);
        out.println("Student name: ");//send text to client;
    } catch (IOException e) {
       throw new RuntimeException("It all went horribly wrong!", e);
    }
}
从:

public OutputStream getOutputStream()引发IOException


是一个选中的异常。您需要使用
try
/
catch
块来处理这种可能性。

因此您需要添加try/catch块来处理I/O异常

阅读Java教程中关于的部分。

Kalla


如果你不知道红色下划线的意思,你需要在try/catch块之间放一行,或者声明run来抛出IOException

如果你不知道红色下划线的意思,那么你有没有尝试编译代码来获得编译消息?@camickr:它说线程“thread-0”中出现异常错误:未解决的编译问题:ServerStudentThread.run(ServerStudentThread.java:21)上未处理的异常类型IOException感谢您的回复。我只是Java的初学者。是的,我听说在爪哇我们总是需要尝试和抓住。为什么?@Kalla,这就是为什么我为你提供了教程链接,这样你就可以阅读,而不必依赖别人发布代码。这样您就可以更好地理解这个概念。run方法由
Runnable
接口指定,如果OP试图抛出选中的异常,它将不会遵守该接口。我相信在这种情况下,结果将是一个重载方法和一个启动时什么都不做的线程。