需要为每个连接创建一个新线程。线程应该具有写入套接字的功能,即使它正在 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/