如何从命令行执行 java.class

我有一个编译好的 java 类:

Echo.class

public class Echo {
public static void main (String arg) {


System.out.println(arg);
}
}

I cd到目录并输入: java Echo "hello"

我得到了这个错误:

C:\Documents and Settings\joe\My Documents\projects\Misc\bin>java Echo "hello"
Exception in thread "main" java.lang.NoClassDefFoundError: Echo
Caused by: java.lang.ClassNotFoundException: Echo
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Echo.  Program will exit.

什么是最简单的方法来获得我的 Java 代码的形式,我可以从命令行运行,因为不得不使用 Eclipse IDE?

446248 次浏览

试试:

java -cp . Echo "hello"

假设你编译了:

javac Echo.java

然后,“当前”目录有可能不在您的类路径中(java 在其中查找。类别定义)

如果是这种情况,并列出目录显示的内容:

Echo.java
Echo.class

那么,这些方法中的任何一种都可能奏效:

java -cp . Echo "hello"

或者

SET CLASSPATH=%CLASSPATH;.


java Echo "hello"

随后,正如 弗雷德里克指出的,您将得到另一个错误消息,如。

线程“ main”java.lang.NoSuchMethodError: main 中的异常

当这种情况发生时,去看看他的回答:)

您需要指定类路径:

java -cp . Echo "hello"

这告诉 java 使用 .(工作目录)作为它的类路径,也就是它查找类的位置。注意,在使用包时,类路径必须包含根目录,而不是包的子目录。例如,如果你的类是 my.package.Echo,而。类文件是 bin/my/package/Echo.class,正确的类路径目录是 bin

你没有有效的主要方法... 签名应该是: 公共静态空气总管(字符串[]弧度) ;

因此,在您的情况下,代码应该如下所示:

public class Echo {
public static void main (String[] arg) {


System.out.println(arg[0]);
}
}

编辑: 请注意,奥斯卡也是正确的,因为您丢失了。在您的类路径中,您将遇到处理完该错误后我解决的问题。

首先,您是否使用命令行 javac 编译器编译了这个类?其次,似乎你的 main 方法有一个不正确的签名——它应该接受一个 String 对象数组,而不仅仅是一个:

public static void main(String[] args){

一旦你修改了代码来接受一个 String 对象的数组,那么你需要确保你打印的是数组的一个元素,而不是数组本身:

System.out.println(args[0])

如果您想打印整个命令行参数列表,您需要使用一个循环,例如。

for(int i = 0; i < args.length; i++){
System.out.print(args[i]);
}
System.out.println();

我的情况有点复杂。我必须做三个步骤,因为我使用。Dll,用于 JNI 代码。我的文件是

S:\Accessibility\tools\src\main\resources\dlls\HelloWorld.dll
S:\Accessibility\tools\src\test\java\com\accessibility\HelloWorld.class

我的代码包含以下代码行

System.load(HelloWorld.class.getResource("/dlls/HelloWorld.dll").getPath());

首先,我必须移动到类路径目录

cd /D "S:\Accessibility\tools\src\test\java"

接下来,我必须改变类路径来指向工作目录,这样我的类就会被加载,我必须改变类路径来指向资源目录,这样我的 dll 就会被加载。

set classpath=%classpath%;.;..\..\..\src\main\resources;

然后,我必须使用 classname 运行 java。

java com.accessibility.HelloWorld

如果你有在你的 Java 源

package mypackage;

你的类是 hello.java 和

public class hello {

在你的 Hello. java 里

 public static void main(String[] args) {

然后 (编译后) ChangeDir (cd)到 hello.class 所在的目录。 然后

java -cp . mypackage.hello

注意类名前面的工作目录和包名。 它适用于我的 linux 薄荷和我希望在其他操作系统也

感谢堆栈溢出为丰富的信息。

有了 Java11,您就不必再经历这种繁琐的程序了!

相反,你可以这样做:

> java MyApp.java

您不必事先编译,因为所有操作都是在一个步骤中完成的。

您可以在这里获得 Java11JDK: JDK 11 GA 发行版