2014-03-26 60 views
0

我對Java相對來說比較新,而且我一直有一個反覆出現的問題,一直讓我很沮喪。Eclipse推出錯誤的.Class文件

我在同一個Project文件夾中有兩個類文件:'Main.java'&'Client.java'。

'Main.java'是服務器(我首先運行這個)。 我嘗試運行Client.java來連接到服務器。但是,無論我嘗試解決此問題,它都會重新啓動「Main.java」。我試圖嘗試選擇「運行」和「運行配置..」,但似乎沒有任何工作。這已經發生在幾個項目中,我似乎無法找出解決方案。

這裏是我的代碼:

1:Main.java

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.net.SocketAddress; 
import java.util.ArrayList; 

public class Main { 

    public static void main(String[] args) throws IOException { 
     try { 
      final int PORT = 6677; 
      ServerSocket server = new ServerSocket(PORT); 
      System.out.println("Waiting for clients..."); 

      while (true) { 
       Socket s = server.accept(); 

       System.out.println("Client connected from " 
         + s.getLocalAddress().getHostName()); 

       Client chat = new Client(s); 
       Thread t = new Thread(chat); 
       t.start(); 
      } 
     } catch (Exception e) { 
      System.out.println("An error occured."); 
      e.printStackTrace(); 
     } 
    } 

} 

2:Client.java

import java.io.PrintWriter; 
import java.net.Socket; 
import java.util.Scanner; 

public class Client implements Runnable { 

    private Socket socket; 

    public Client(Socket s) { 
     socket = s; 
    } 

    @Override 
    public void run() { 
     try { 
      Scanner in = new Scanner(socket.getInputStream()); 
      PrintWriter out = new PrintWriter(socket.getOutputStream()); 

      while (true) { 
       if (in.hasNext()) { 
        String input = in.nextLine(); 
        System.out.println("Client Said: " + input); 
        out.println("You Said: " + input); 
        out.flush(); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

任何幫助是極大的讚賞。

謝謝。

回答

2

這是因爲程序的執行(無論內部有多少類)總是從包含「main()」函數的類開始。 正如您所看到的,Main.java是保存main()函數的文件,因此該程序的執行始終以此開始。 最簡單的解決方案之一(不是最好的)將是在主函數中創建客戶端的實例。希望這可以幫助!

+0

+1但在服務器內啓動客戶端不是最佳選擇。考慮使用2個main()方法。 – FazoM

+0

真@ fazovsky ..我在暗示這樣才能理解使用main()函數背後的概念。乾杯 – attaboy182

+0

@ Attaboy182:非常感謝您的回覆。這導致我的問題,因爲它試圖再次運行服務器,當它已經運行並給出「地址已在使用」錯誤。這甚至發生在IBM DeveloperWorks批准的另一個簡單的服務器/客戶端程序的源代碼中,該程序應該可以直接使用。無論我做什麼,它都會重新啓動服務器(拒絕啓動客戶端),導致我無法連接這兩個服務器。 – mickm