我有一个编译的java类:
Echo.class
public class Echo {
public static void main (String arg) {
System.out.println(arg);
}
}
我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?
答案 0 :(得分:105)
尝试:
java -cp . Echo "hello"
假设您编译为:
javac Echo.java
然后有可能“class”目录不在你的类路径中(java查找.class定义)
如果是这种情况并列出你的目录内容:
Echo.java
Echo.class
然后任何一个都可行:
java -cp . Echo "hello"
或
SET CLASSPATH=%CLASSPATH;.
java Echo "hello"
后来Fredrik指出你会收到另一条错误消息。
线程“main”中的异常java.lang.NoSuchMethodError:main
当发生这种情况时,去看看他的答案:)
答案 1 :(得分:15)
您需要指定类路径。这应该这样做:
java -cp . Echo "hello"
这告诉java使用.
(当前目录)作为其类路径,即它查找类的位置。注意,与使用包时相比,类路径必须包含根目录,而不是包子目录。例如如果您的类为my.package.Echo
且.class文件为bin/my/package/Echo.class
,则正确的类路径目录为bin
。
答案 2 :(得分:15)
您没有有效的主要方法......签名应该是: public static void main( String [] args);
因此,在您的情况下,代码应如下所示:
public class Echo {
public static void main (String[] arg) {
System.out.println(arg[0]);
}
}
修改:请注意Oscar也是正确的,因为您遗失了。在你的类路径中,你会遇到我在处理完这个错误后解决的问题。
答案 3 :(得分:5)
有了Java 11,您将不必再经历这个繁琐的工作!
相反,您可以执行以下操作:
> java MyApp.java
您不必事先进行编译,因为这一切都一步一步完成。
您可以在此处获取Java 11 JDK:JDK 11 GA Release
答案 4 :(得分:3)
可能有一些问题 - 这是一个可以帮助你入门的教程:Running Java as a Command Line Application。
答案 5 :(得分:2)
我的情况有点复杂。对于JNI代码,我在资源目录中使用.dll时必须执行三个步骤。我的档案是
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
答案 6 :(得分:1)
如果你有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薄荷,我希望在其他操作系统
感谢Stack溢出以获取大量信息。
答案 7 :(得分: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();