2014-02-18 62 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