2014-02-18 65 views
0
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(); 
     } 
    } 
} 

我运行了我的服务器类的主要无效,它没有输出(就像它支持)。但是当我把:Java线程未启动?

new Server().Server(); 

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

回答

3

的问题是,容易混淆,

private void Server() { 

声明了一个名为Server方法,而不是构造

把它变成一个构造函数,删除void

private Server() { 

一旦你做到了这一点,new Server().start()应该工作。

+0

谢谢,它工作得很好。我想我有一个休息日。 –

+0

@ Mr.Charles:这是一个微妙的错误。我之前就看到过,我很惊讶编译器不会对此提出警告。 – NPE