2012-02-10 156 views
3

这个问题之前已经被问过了,但是由于某些原因我仍然无法确定什么是错的。 我在文件src中得到了一个名为NewClass的包,在包中的syntaxtest中。从SRC路径I型:从终端运行java类

的javac的src/syntaxtest/NewClass.java

和类被编译,我可以看到NewClass.class在syntaxtest文件夹中。现在从相同的路径或甚至与NewClass.class相同的文件夹,我不知道如何从终端运行类。我已经做了很多不同的尝试,但我醚得到

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

+1

你试过“java NewClass”吗?确保你的目录在尝试命令之前(以它的形式) – Andrew 2012-02-10 20:41:50

+0

当我在文件夹中尝试java NewClass时,NewClass.class是我得到的ClassDefNotFound。如果我尝试java syntaxtest.NewClass我得到ClassDefNotFound(错误的名称:syntaxtest/NewClass)。当我尝试这个名字时,我得到了NoClassDefFound ... – Giannis 2012-02-10 20:51:14

+0

“java -cp.NewClass”试试这个 – Andrew 2012-02-10 21:00:53

回答

7

试试 “java -cp src syntaxtest.NewClass”。也就是说,如果你有一个包含子文件夹(包)“syntaxtest”的文件夹“src”,并且类“NewClass”在“包语法测试”中,那么上述命令将起作用。

$ 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! 
+0

nope不起作用。在这里和那里尝试了几个斜杠的变化,但仍然没有。 – Giannis 2012-02-10 20:48:44

+0

@latusaki:我假设你的包名是“syntaxtest”;如果它是“src.syntaxtest”,那么尝试“java src.syntaxtest.NewClass'”。 – maerics 2012-02-10 20:52:48

+0

没有src只是一个文件夹。里面有另一个名为syntaxtest的文件夹。然后是.java和.class文件。 NewClass在syntaxtest包中。很奇怪,我无法弄清楚如何打电话给班级。顺便说一句,如果我从类中删除包,所以它不在我可以称之为的任何包中。所以包装肯定有问题。 – Giannis 2012-02-10 21:01:54

1

我做了如下测试:

  • 创建于家用/测试/嗒嗒的Java文件/ TestClass.java

    包等等;

    public class TestClass public static void main(String [] args){System.out.println(“Hello World!”); }}

  • 走到名录主页/测试/

  • 通过键入编译文件:
javac blah/TestClass.java 
  • 得到编译好的文件。
  • 运行它通过键入: “Hello World” 的
java blah.TestClass 
  • 得到的消息如预期的那样:程序运行正常。
  • 走到名录主页/
  • 试图通过打字来运行:

Java测试/ blah.TestClass

  • ...等众多斜线和点的组合.....没有工作....继续得到同样的异常为你:
java.lang.NoClassDefFoundError 

所以,在我看来,要运行使用命令“Java”作为一个Java类,你真的必须在应用程序的根文件夹中。

0

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

您不能从另一个文件夹执行这些类,但是您可以执行的是从另一个文件夹编译为要执行的文件夹。

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

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

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