2012-05-08 68 views
8

我在编译和从命令行运行Eclipse java项目时遇到了两个问题。当我刚刚从eclipse IDE运行时,这工作正常。我尝试了谷歌搜索,但无法真正的工作。任何帮助深表感谢。从命令行运行Eclipse项目

问题1:当我尝试从与.java文件不同的位置进行编译时,它会引发错误“无法读取:myfile.java”。但如果我迁移到这个目录然后编译。
我正在给该命令(当在某些其他目录):
的javac -cp C:\ ABC \ SRC \ XYZ myfile.java
我正在给在XYZ目录时,命令:
的javac myfile.java
这生成了两个.class文件myfile.class和Testing_Thread.class(我想这是因为我在我的代码中的线程)

问题2:我已经将它的目录之后编译,当我尝试运行程序时,出现错误“线程异常”主“java.lang.NoClassDefFoundError:myfile(错误名称:XYZ/myfile.java)”即使我试图从XYZ目录运行。我也尝试从其他地方跑时遇到同样的错误。
,我是给在XYZ目录时,命令:
的Java MYFILE
是我给的时候在其他一些地方的命令:
java命令C:\ ABC \ SRC \ XYZ MYFILE

我还附上我的目录结构的层次结构,如果它是任何帮助:
enter image description here

回答

8

这些示例假设以下源结构:

C:\temp\compile-test\src\a\b\c\D.java 

其中D.java是:

package a.b.c; 

public class D { } 

第一个问题,无法读取:myfile.java,是因为它是不正确的使用cp命令行选项来点到你的源代码。

C:\temp\compile-test\src>javac -cp c:\temp\compile-test\src\a\b\c D.java 
javac: file not found: D.java 
Usage: javac <options> <source files> 
use -help for a list of possible options 

这应该改为以下,其中javac从源文件夹中运行,我们可以使用相对路径的源文件(注 - javac从源文件夹运行此处):

C:\temp\compile-test\src>javac a\b\c\D.java 

还是这个,在这里我们指明完整路径的源文件,并javac可以在任何地方运行(注 - javacC:\运行这里):

C:\>javac temp\compile-test\src\a\b\c\D.java 

以上两个选项都会导致您的类文件与源文件在同一个文件夹中创建。即:

C:\temp\compile-test\src\a\b\c\D.class 

对于第二个问题,如果你试着运行具有从“内部”包一包名称的类,这将导致名称被错误(注 - java正在从“内部”运行这里的包):

C:\temp\compile-test\src\a\b\c>java D 
Exception in thread "main" java.lang.NoClassDefFoundError: D (wrong name: a/b/c/D) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
     at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
Could not find the main class: D. Program will exit. 

要运行D类,你应该在包装“根”,并提供Fully Qualified Class Name。即:

C:\temp\compile-test\src>java a.b.c.D 
Exception in thread "main" java.lang.NoSuchMethodError: main 

注意我得到一个异常的D类没有一个主要方法,因此不能运行。要解决,我们添加了一个主要方法:

package a.b.c; 

public class D { 
    public static void main(String[] args) { 
     System.out.println("main"); 
    } 
} 

,并重新运行:

C:\temp\compile-test\src>java a.b.c.D 
main 
+0

感谢您的奇妙明确的解释:) – sachin11