如何从命令行执行java .class

joe*_*joe 108 java

我有一个编译的java类:

Echo.class

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

            System.out.println(arg);
    }
}
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

在我可以从命令行运行的表单中获取我的java代码的最简单方法是什么,因为必须使用Eclipse IDE?

Osc*_*Ryz 117

尝试:

java -cp . Echo "hello"
Run Code Online (Sandbox Code Playgroud)

假设您使用以下编译:

javac Echo.java 
Run Code Online (Sandbox Code Playgroud)

那么"current"目录可能不在你的类路径中(java查找.class定义)

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

Echo.java
Echo.class
Run Code Online (Sandbox Code Playgroud)

然后任何一个可能工作:

java -cp . Echo "hello"
Run Code Online (Sandbox Code Playgroud)

要么

SET CLASSPATH=%CLASSPATH;.  

java Echo "hello"
Run Code Online (Sandbox Code Playgroud)

后来Fredrik指出你会收到另一条错误消息.

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

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

  • -cp.告诉Java他应该添加.(当前工作目录)到类路径,意思是他在寻找代码的地方. (2认同)

Mic*_*rdt 16

您需要指定类路径.这应该这样做:

java -cp . Echo "hello"
Run Code Online (Sandbox Code Playgroud)

这告诉java使用.(当前目录)作为其类路径,即它查找类的位置.注意,与使用包时相比,类路径必须包含根目录,而不是包子目录.例如,如果您的类是my.package.Echo.class文件bin/my/package/Echo.class,那么正确的类路径目录是bin.


Fre*_*rik 15

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

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

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

            System.out.println(arg[0]);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:请注意奥斯卡也是对的,因为你错过了.在你的类路径中,你会遇到我处理完错误后解决的问题.


小智 7

如果你的java源代码中有

package mypackage;
Run Code Online (Sandbox Code Playgroud)

你的课程是 hello.java

public class hello {
Run Code Online (Sandbox Code Playgroud)

在那个 hello.java 中你有

 public static void main(String[] args) {
Run Code Online (Sandbox Code Playgroud)

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

java -cp . mypackage.hello
Run Code Online (Sandbox Code Playgroud)

请注意当前目录和类名之前的包名。它适用于我的 Linux Mint,我希望也适用于其他操作系统

感谢 Stack Overflow 提供的丰富信息。

  • 注意:类文件应该可以通过“./mypackage/hello.class”名称找到。另请参阅:“[从命令行在包中运行 java](/sf/ask/1360335651/)”问题。 (3认同)

Rya*_*ndy 7

使用Java 11,您将不必再经历这个繁琐的工作了!

相反,您可以这样做:

> java MyApp.java
Run Code Online (Sandbox Code Playgroud)

您无需事先进行编译,因为这一切都一步一步完成。

您可以在此处获取Java 11 JDK:JDK 11 GA版本