如何在命令提示符中运行Java程序

27

我创建了一个Java项目来调用Web服务。 它有一个主Java文件和另一个类文件。 我使用了一些HTTP客户端的jar文件。
在Eclipse中它运行良好。 我需要通过传递一些参数在命令提示符中运行Java程序。
在命令提示符中,我进入了包含主Java和子类Java文件的src文件夹,并输入了以下命令。

javac mainjava.java    

我遇到了以下错误:

mainjava.java:14: 找不到符号
符号: 类 SubClass

这里的SubClass是我另一个Java类文件,用于调用web服务。

如何通过传递参数来运行程序?


你设置好了类路径吗? - Rocky
5个回答

25

javac 是 Java 编译器。 java 是 Java 虚拟机,用于执行 Java 程序。您不能执行 .java 文件,它们只是源文件。

假设在 Eclipse 中构建后,有一个包含 .class 文件的目录或 .jar 文件:

java/src/com/mypackage/Main.java
java/classes/com/mypackage/Main.class
java/lib/mypackage.jar

从目录 java 中执行以下命令:

java -cp lib/mypackage.jar Main arg1 arg2


有webcall/classes或者webclass\lib文件夹吗? - hmjd
我使用了javac -cp extjarfiles/AllJarFiles main.java命令进行编译,编译成功了,但是在运行项目时出现了错误。 - Vignesh
我编译了两个Java文件,关于Apache我收到了17个警告----------------------"org\apache\http\conn\scheme\SchemeRegistry.class(org\apache\http\conn\scheme:SchemeRegistry.class):警告:在类型'net.jcip.annotations.GuardedBy'中找不到注释方法'value()':找不到net.jcip.annotations.GuardedBy的类文件 org\apache\http\impl\client\AbstractHttpClient.class(org\apache\http\impl\client:AbstractHttpClient.class):警告:在类型'net.jcip.annotations.GuardedBy'中找不到注释方法'value()'" - Vignesh
之后,我通过“java main hello”运行了该项目。但我收到了以下错误:“Exception in thread 'main' java.lang.NoClassDefFoundError: WSCall/ServiceCall Caused by: java.lang.ClassNotFoundException: WSCall.ServiceCall”。这里的servicecall是主要的.java文件。 - Vignesh
从目录 webcall 尝试运行:java -cp .:extjarfiles/httpcore.jar:extjarfiles/httpclient.jar main hello - hmjd
显示剩余2条评论

16

Java 的一个非常通用的命令提示符使用方法是

javac mainjava.java
java mainjava

你经常会看到人们这样做:

javac *.java
java mainjava

至于子类问题,可能是因为您的类路径中缺少路径,我认为可以使用 -c 标志来设置。


+1 对于 javac *.java,这也会编译 OP 的 SubClass.java 源代码文件。 - martijno

3
你可以使用javac *.java命令编译所有Java源代码。此外,你应该了解一些关于类路径的知识,因为似乎你需要设置适当的类路径才能成功编译(因为你的IDE使用一些库来构建WebService客户端)。我还可以建议你检查一下你的IDE用来构建项目的命令。

在我的 IDE 中,使用以下命令运行 *****:"C:\Program Files\Java\jre6\bin\javaw.exe" -Dfile.encoding=Cp1252 -classpath "D:\Projects\Eclipse Projects\WebServiceCall\bin;D:\Projects\Eclipse Projects\WebServiceCall\ExternalJarFiles\httpcore-4.0.jar;D:\Projects\Eclipse Projects\WebServiceCall\ExternalJarFiles\httpclient-4.0.jar;D:\Projects\Eclipse Projects\WebServiceCall\ExternalJarFiles\commons-logging-1.1.jar;D:\Projects\Eclipse Projects\WebServiceCall\ExternalJarFiles\gson-1.7.1.jar" WSCall.ServiceCall **** - Vignesh
如果我在命令提示符中使用上述命令,我可以运行它。但是我无法传递参数。 - Vignesh

2

您需要做的只是:

  • 使用类路径(可选)构建mainjava类

    javac *.java [-cp "wb.jar;"]

  • 创建包含以下内容的Manifest.txt文件:

    Main-Class:mainjava

  • 为mainjava类打包jar文件

    jar cfm mainjava.jar Manifest.txt *.class

然后,您可以在cmd中运行此.jar文件并为其添加类路径(可选)和参数。

java [-cp "wb.jar;"] mainjava arg0 arg1 

HTH.


1

javac 只编译代码。您需要使用 java 命令来运行代码。错误是因为您的类路径不包含在编译时尝试编译的类 Subclass。您需要在 javac 命令中使用 -cp 变量添加它们。

java -cp classpath-entries mainjava arg1 arg2 应该使用 2 个参数运行您的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接