【问题标题】:How to execute a java .class from the command line如何从命令行执行 java .class
【发布时间】:2010-11-19 18:07:52
【问题描述】:

我有一个编译好的 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.

相对于必须使用 Eclipse IDE,以我可以从命令行运行的形式获取我的 java 代码的最简单方法是什么?

【问题讨论】:

  • 建议:在快速审查下,为了不使答案无效,原始问题也许最好不要编辑。看到正确的方法签名然后一堆答案说它不正确真的很奇怪。至少应该保留错误代码,以便与正确版本进行比较。

标签: java


【解决方案1】:

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

相反,您可以这样做:

> java MyApp.java

您不必事先编译,因为它是一步完成的。

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

【讨论】:

  • > 复制 C:\Desenv\workspaceServer\TestProject\src\WebServiceStandAlone\MyApp.java 。 /y && javac MyApp.java && java -cp 。 MyApp && del MyApp.class && del MyApp.java 有些人确实更喜欢老式的方式 =)
【解决方案2】:

如果你的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 mint,我希望也适用于其他操作系统

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

【讨论】:

【解决方案3】:

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

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

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

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

编辑:请注意,Oscar 也是正确的,因为您错过了。在您的类路径中,您会遇到我在处理该错误后解决的问题。

【讨论】:

    【解决方案4】:

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

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

    java com.accessibility.HelloWorld 
    

    【讨论】:

      【解决方案5】:

      首先,您是否使用命令行 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();
      

      【讨论】:

        【解决方案6】:

        试试:

        java -cp . Echo "hello"
        

        假设您编译时使用:

        javac Echo.java 
        

        那么有可能“当前”目录不在您的类路径中(java 在其中查找 .class 定义)

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

        Echo.java
        Echo.class
        

        那么任何一个都可以工作:

        java -cp . Echo "hello"
        

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

        稍后正如Fredrik 指出的那样,您将收到另一条错误消息,例如。

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

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

        【讨论】:

        • -cp 。告诉 Java 他应该添加 . (当前工作目录)到类路径,意思是他正在寻找代码的地方。
        【解决方案7】:

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

        java -cp . Echo "hello"
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-06
          • 2012-06-23
          • 2013-08-25
          • 2017-10-07
          • 2011-03-04
          相关资源
          最近更新 更多