Java Thread没有启动?

时间:2014-02-18 20:15:55

标签: java multithreading datagram

package BroadCast;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Server extends Thread {

    private DatagramSocket sock;

    public static boolean ServerUp = false;

    // Wierdly not running this as a thread.
    private void Server() {
        try {
            sock = new DatagramSocket(Constants.port);
            ServerUp = true;
            // Prints on console.
            Constants.Server(Constants.ServerName
                    + ", loaded sucessfully on port: " + Constants.port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Server().start();
    }

    @Override
    public void run() {
        while (ServerUp) {
            byte[] data = new byte[1024];
            DatagramPacket Packet = new DatagramPacket(data, data.length);
            try {
                sock.receive(Packet);
            } catch (IOException e) {
                e.printStackTrace();
            }
            // Prints on console.
            Constants.Server(new String(data).trim());
        }
    }

    public void ServerData(byte[] data, InetAddress ip, int port) {
        DatagramPacket Packet = new DatagramPacket(data, data.length, ip, port);
        try {
            sock.send(Packet);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我运行了我的Server类的主void,它没有输出(就像它支持的那样)。但是当我把:

new Server().Server();

(运行服务器无效),它工作。但是,它不会正确循环(就像普通的线程一样)。 如果你能帮助我,那就太棒了(这可能是一个小错误)。

1 个答案:

答案 0 :(得分:3)

问题是,令人困惑的是,

private void Server() {

声明一个名为Server 的方法,而不是构造函数

要将其转换为构造函数,请删除void

private Server() {

完成此操作后,new Server().start()应该有效。