java - 无法在线程的构造函数中初始化 PrintWriter 字段

标签 java

需要为每个连接创建一个新线程。线程应该具有写入套接字的功能,即使它正在 run() 中等待客户端输入:String clientCommand = in.readLine()。函数update应该满足这个要求,并且能够使用PrintWriter outWr写入套接字,但它似乎是null,即使将其设置为线程构造函数。 无法在构造函数中初始化 PrintWriter outWr。在 try 构造之后,outWr 仍然为 null。如何解决?

<小时/>
public class Server {
    public static void main(String[] args) { 
        ...
        ClientServiceThread cliThread = new ClientServiceThread(clientSocket, id++, auction);
        ...
}
<小时/>
public class ClientServiceThread extends Thread  {
private PrintWriter outWr;

ClientServiceThread(Socket s, int clientID, Auction a) {
        try {
            PrintWriter outWr = new PrintWriter(new OutputStreamWriter(
                    m_clientSocket.getOutputStream()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
public void run() {....; String clientCommand = in.readLine(); ... }
public void update(String msg){outWr.println(msg);}

最佳答案

看看这段代码

public class ClientServiceThread extends Thread  {
private PrintWriter outWr;

ClientServiceThread(Socket s, int clientID, Auction a) {
        try {
            PrintWriter outWr = new PrintWriter(new OutputStreamWriter(

在构造函数中,您不初始化类字段,而是初始化本地引用PrintWriter outWr

更改为

        try {
            outWr = new PrintWriter(new OutputStreamWriter(

关于java - 无法在线程的构造函数中初始化 PrintWriter 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866786/

相关文章:

java - java.io.PrintWriter 和 java.io.BufferedWriter 的区别?

java - 在java中使用for循环将名称添加到数组中

java - 工厂设计模式缺失环节的实现

java - Apache POI 设置 Excel 图表标题

java - 如何初始化 char 数组以容纳 HTTP POST 内容长度

java - 当我从 jar 运行应用程序时,为什么 new File(path) 不起作用?

java - 有没有办法确定 Servlet Filter 执行的优先级?

Java:重置单例对象

java - maven 依赖插件忽略依赖版本?

java - 而(真);当不在 void 中时,循环会抛出无法访问的代码