如何从命令行运行Eclipse编译的Java类?

时间:2012-12-23 20:26:15

标签: java eclipse compiler-errors

我正在编写一个基本的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>窗口>首选项> Java>编译器显示 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)

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

3 个答案:

答案 0 :(得分:2)

java -cp . basicChat.Server 8888

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

原因:

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

如果在不同的包(名称空间)中有多个名为Server的类,请考虑如何选择目标类。

答案 1 :(得分: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]

答案 2 :(得分:0)

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

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

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