0

我正在编写一个基本的 TCP 聊天程序,其中一个要求是它可以使用以下参数格式从命令行运行:

java Server 8888
java Client localhost 8888

这将启动一个在 8888 上侦听的服务器,并等待接受来自客户端的传入连接。然后启动一个客户端并连接到 localhost:8888 的服务器。这些类都可以在 Eclipse 中编译和运行,我已分别将上述变量添加到类的运行配置中。

如果我导航到 CMD 中的文件目录,我可以看到已编译的 .class 文件,但是当我尝试使用以下命令运行服务器时:

java Server 8888

我得到错误

Error: Could not find or load main class Server

Eclipse>Window>Preferences>Java>Compiler 显示JDK 1.7

从命令行运行 java -version 显示

java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
Java HotSpot(TM) 64-Bit Server VM (build 22.0-b10, mixed mode)

我希望能够从单独的提示并行运行这两个类。有任何想法吗?

4

3 回答 3

3
java -cp . basicChat.Server 8888

您需要指定完全限定的类名(包括包名)

原因:

类全名(称为完全限定名)不是Server,而是basicChat.Server。该文件位于名为basicChat. 所以java正在寻找一个与包名匹配的目录结构。Server.class 文件位于文件系统中的 basicChat 目录下。

Server否则请考虑如果您在不同的包(名称空间)中调用了多个类,我们将如何选择预期的类。

于 2012-12-23T20:34:30.770 回答
1

你确定在这两个类中你都有main方法吗?

public static void main(String[] args) { ... }

你的课程有public修饰符吗?

如果你在一个包中有这个类,例如:test.Server你将从这样的bin文件夹中运行它:

java test.Server 8888

编译这个类:

public class Server {
    public static void main(String[] args) {
        System.out.println(Arrays.deepToString(args));
    }
}

并运行:

java Server 8888

给出输出:

[8888]
于 2012-12-23T20:33:52.870 回答
0

您的 CLASSPATH 不正确。从 bin 目录尝试以下(在 Windows 上):

java -cp .;%CLASSPATH% basicChat.Server 8888

此外,您可以在 Eclipse 中运行您的服务器。为它创建一个运行配置,在参数中指定一个端口。然后您可以在 Eclipse 中启动它,它会在您停止或关闭 Eclipse 时运行。

于 2012-12-23T20:30:20.737 回答