【问题标题】:Eclipse Launches Wrong .Class FileEclipse 启动错误的 .Class 文件
【发布时间】:2014-05-05 11:48:36
【问题描述】:

我对 Java 比较陌生,而且我一直遇到一个令我沮丧的反复出现的问题。

我在同一个项目文件夹中有两个类文件:“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:客户端.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();
        }
    }

}

非常感谢任何帮助。

谢谢。

【问题讨论】:

    标签: java eclipse


    【解决方案1】:

    这是因为程序的执行(无论它内部有多少类)总是从包含“main()”函数的类开始。 如您所见,Main.java 是包含 main() 函数的文件,因此该程序的执行总是从该文件开始。 最简单的解决方案之一(不是最好的)是在主函数中创建客户端实例。希望这会有所帮助!

    【讨论】:

    • +1 但在服务器中启动客户端并不是最佳选择。考虑使用 2 个 main() 方法。
    • so true @Fazovsky ..我建议这样做是为了让他理解使用 main() 函数背后的概念。干杯
    • @Attaboy182:非常感谢您的回复。这引起了我的问题,因为它尝试再次运行服务器,当它已经运行并给出“地址已在使用”错误时。这甚至发生在 IBM DeveloperWorks 批准的另一个简单服务器/客户端程序的源代码中,该程序应该是开箱即用的。无论我做什么,它都会重新启动服务器(拒绝启动客户端),让我无法连接两者。
    • @Fazovsky:非常感谢您的意见。我将如何实施您的建议?
    • @user3029329 解决方案是采用 Faz 建议的两种主要方法。给你:stackoverflow.com/questions/4754058/…
    猜你喜欢
    • 1970-01-01
    • 2011-09-14
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多