如何从命令行执行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();