无法将void转换为“classname”

时间:2013-02-12 22:35:01

标签: java networking tcp

我试图创建一个可以存储在数组中的线程的类,这将使我更容易处理从客户端到服务器的用户输入。

这是我的PongPlayerThread

package Pong;

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

public class PongPlayerThread extends Thread 
{
private Socket socket = null;
private String pongData = "";

public PongPlayerThread() 
{
    //clear
}

public PongPlayerThread(Socket socket, int id, String data) 
{
    //super("PongPlayerThread");
    pongData = data;
    this.socket = socket;
}

public void passData(String data)
{
    pongData = data;
}

public void run()
{
    try
    {
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        while(true)
        {
            out.println(pongData);
        }
    }
    catch (IOException e) 
    {
        e.printStackTrace();
    }
}

}

现在在我的服务器上的这一行,客户端可以连接

players[0] = new PongPlayerThread(serverSocket.accept(), 0, rtnInfo()).start();

我收到此错误 “无法从void转换为PongPlayerThread”为什么会这样?我已经搜索了但是当你的类名出错时很难。

我现在有了这段代码

        players[idPlayer] = new PongPlayerThread(serverSocket.accept(), idPlayer, rtnInfo());
        players[idPlayer].start();

但是当客户端连接时我得到了这个错误 傍 400.0:301.0:60.0:300.0:740.0:300.0 服务器启动了 服务器已设置并将尝试创建套接字 线程“main”java.lang.NullPointerException中的异常     在Pong.PongServer.main(PongServer.java:82)

它指向的线是     players [idPlayer] = new PongPlayerThread(serverSocket.accept(),idPlayer,rtnInfo()); ???

2 个答案:

答案 0 :(得分:5)

players[0] = new PongPlayerThread(serverSocket.accept(), 0, rtnInfo());
players[0].start();

答案 1 :(得分:2)

问题是Thread.start()返回void,并且您尝试将new PPT(...).start()的结果分配给players[0]

new PPT(...).start()返回void,因此编译器抱怨它无法将此void转换为PongPlayerThread类型的对象。