如何从命令行执行java .class

我有一个编译的Java类:

Echo.class

public class Echo { public static void main (String arg) { System.out.println(arg); } } 

cd到目录并input: 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. 

用我可以从命令行运行的forms获得我的java代码的最简单方法是什么?

尝试:

 java -cp . Echo "hello" 

假设你编译了:

 javac Echo.java 

那么有可能“当前”目录不在你的类path中(其中java寻找.class定义)

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

 Echo.java Echo.class 

那么任何这个可能工作:

 java -cp . Echo "hello" 

要么

 SET CLASSPATH=%CLASSPATH;. java Echo "hello" 

后来Fredrik指出你会得到另外一个错误信息。

线程“main”中的exceptionjava.lang.NoSuchMethodError:main

当发生这种情况,去阅读他的答案:)

你需要指定类path。 这应该做到这一点:

 java -cp . Echo "hello" 

这告诉java使用. (当前目录)作为它的类path,也就是它寻找类的地方。 注意比使用包时,类path必须包含根目录,而不是包子目录。 例如,如果你的类是my.package.Echo ,而.class文件是bin/my/package/Echo.class ,那么正确的classpath目录是bin

你没有有效的主要方法…签名应该是:public static void main( String [] args);

因此,在你的情况下,代码应该是这样的:

 public class Echo { public static void main (String[] arg) { System.out.println(arg[0]); } } 

编辑:请注意, 奥斯卡也是对的,你失踪了。 在你的类path中,在处理完这个错误之后,你会遇到我解决的问题。

可能有几件事情是错误的 – 下面是一个应该让你开始的教程: 运行Java作为命令行应用程序 。

我的情况有点复杂。 自从我在资源目录中使用.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()); 

首先,我必须移动到classpath目录

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

接下来,我不得不改变类path指向当前目录,这样我的类将被加载,我不得不改变类path指向他的资源目录,所以我的DLL将被加载。

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

然后,我不得不使用classname来运行java。

 java com.accessibility.HelloWorld 

首先,你有没有使用命令行javac编译器编译类? 其次,看起来你的主要方法有一个不正确的签名 – 它应该是一个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();