【问题标题】:Running java class from terminal从终端运行java类
【发布时间】:2012-03-03 07:38:17
【问题描述】:

以前有人问过这个问题,但由于某种原因我仍然无法弄清楚有什么问题。 我在文件 src 的包 syntaxtest 中有一个名为 NewClass 的类。从 src 路径我输入:

javac src/syntaxtest/NewClass.java

并且类已编译,我可以在 syntaxtest 文件夹中看到 NewClass.class。现在从同一个路径甚至同一个文件夹与 NewClass.class,我无法弄清楚如何从终端运行该类。我做了很多不同的尝试,但我得到了乙醚

ClassDefNotFound 或 ClassDefNotFound(错误名称:syntaxtest/NewClass)

【问题讨论】:

  • 你试过“java NewClass”吗?在尝试命令之前确保你在它的目录中(以这种形式拥有它)
  • 当我在文件夹中尝试 java NewClass 时,NewClass.class 是我得到 ClassDefNotFound。如果我尝试 java syntaxtest.NewClass 我得到 ClassDefNotFound (wrong name: syntaxtest/NewClass) 。当我尝试该名称时,我得到 NoClassDefFound...
  • "java -cp .NewClass" 试试这个

标签: java terminal


【解决方案1】:

我遇到了类似的问题。 我想直接从 Mac finder 中使用 src 和 bin 文件夹来组织我的项目,并使用 Emacs 或其他一些文本编辑器。我只是不喜欢日食。

你不能从另一个文件夹执行类,但你可以做的是从另一个文件夹编译到你要执行的那个。

例如(假设没有包),移动到bin文件夹并运行:

$ javac ../src/name.java -d ../bin/

(从 src 文件夹编译并直接在 bin 上输出 .class 文件)

【讨论】:

    【解决方案2】:

    我做了以下测试:

    • 在 home/test/blah/TestClass.java 中创建了一个 java 文件

      包装废话;

      公共类 TestClass { 公共静态无效主要(字符串[]参数){ System.out.println("Hello World!"); } }

    • 进入目录 home/test/

    • 通过键入以下内容编译文件:
    javac blah/TestClass.java
    
    • 文件编译成功。
    • 通过键入运行它:
    java blah.TestClass
    
    • 收到消息“Hello World!”正如预期的那样:程序运行正常。
    • 进入目录 home/
    • 尝试通过键入来运行:

    java test/blah.TestClass

    • ...以及许多其他斜线和点的组合.....没有任何效果....不断收到与您相同的异常:
    java.lang.NoClassDefFoundError
    

    所以在我看来,要使用命令“java”运行 Java 类,您确实必须位于应用程序的根文件夹中。

    【讨论】:

    • 将近 10 年后:要从另一个目录运行,请使用 -cp 选项告诉 java “rootDir”是什么(可以找到类的位置)!另一个答案现在表明了这一点。
    【解决方案3】:

    试试“java -cp src syntaxtest.NewClass”。

    也就是说,如果您有一个文件夹“src”,其中包含子文件夹(包)“syntaxtest”,并且类“NewClass”在“package syntaxtest”中,那么上述命令将起作用。

    $ ls src/syntaxtest
    NewClass.java
    $ cat src/syntaxtest/NewClass.java
    package syntaxtest;
    public class NewClass {
      public static void main(String args[]) {
        System.out.println("Hello, World!");
      }
    }
    $ javac src/syntaxtest/NewClass.java
    $ java -cp src syntaxtest.NewClass
    Hello, World!
    

    【讨论】:

    • 不行不行。在这里和那里尝试了一些带有斜线的变体,但仍然没有..
    • @latusaki:我假设你的包名是“syntaxtest”;如果是“src.syntaxtest”,请尝试“java src.syntaxtest.NewClass”。
    • no src 只是一个文件夹。它里面有另一个名为 syntaxtest 的文件夹。然后是 .java 和 .class 文件。 NewClass 在 syntaxtest 包中。很奇怪,我不知道如何打电话给班级。顺便说一句,如果我从类中删除包,那么它不在任何包中,我可以调用它。所以包一定有问题。
    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2015-08-19
    • 2011-11-27
    相关资源
    最近更新 更多