2013-10-17 160 views
19

我已阅读之前发布的问题。有些是模糊的,没有解决我的问题,所以我不得不再次问。从命令行运行java包

我有两个简单的类,

package One; 
import One.Inner.MyFrame; 
public class test 
{ 
    public static void main(String args[]) 
    { 
     MyFrame f= new MyFrame(); 
    } 
} 

而其他类,

package One.Inner; 
import java.awt.*; 
import javax.swing.*; 

public class MyFrame extends JFrame 
{ 
    public MyFrame() 
    { 
     setPreferredSize(new Dimension(400,560)); 
     setVisible(true); 
    } 
} 

我在Windows CMD是在基本文件夹 “基本”。我编译使用

basic> javac *.java -d . 

创建文件夹和子文件夹。

cd One 
basic\One> java test 

这产生了一大组错误。许多答案指出了没有工作的完整路径。 我的课程是在一个所以指定一个使用-cp也没有工作。

回答

35

你会运行它:

java One.Test 

...但是从目录(basic),不是从One目录。您始终指定完全合格的类名称。在Java中

哦,包名应该是小写,所以它应该是oneone.inner,不OneOne.Inner。只是一个约定,但几乎每个人都遵循。

+0

它必须完成的目录非常重要,我早点弄错了.TY ....注意到了。我有一种错觉,认为只有木包装内包装必须很小。 – user2756339

+0

有没有办法从同一目录运行它?例如通过命令行选项指定一个工作目录?我为此寻找了很多,每个人都说“只需要一个目标”,但在某些情况下真的很烦人。 –

+0

呵呵,这里是:'java -cp ../ one.Test'。我确信我以前尝试过。 –

11

如果目录是:

从封装的基本目录
basic\One 

运行Java:

basic>java One.test or basic>One.test <optional arguments> 

(理想的包将是小写和类大写):

basic>java one.Test 

如果您收到'不存在'消息,那么java命令找不到您引用的类在你的班级。您可以使用-cp选项指向它们('。'表示'here',并且您可以添加尽可能多的位置,如Windows中的';'和Linux上的':')。

basic>java -cp . one.Test 
or 
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory one.Test 
+0

带-cp标志的示例很有帮助。 +1 – binarysubstrate

+0

谢谢,它的帮助。 –

1

,同时创造一个包中的类,如果你想从CMD您必须创建一个目录与包同名放的.class在运行它,然后你可以轻松地运行它,例如,你创建了一个类名“一”和这个类的包名包,你必须one.java
编译后生成一个名为包的目录运行这些命令

1的javac,之后运行此命令
2 java包。一个
注意:
所有这些都必须在当前工作目录中完成,名称“one”我在这里选择它作为文件名和主类名称 我们都知道第一个命令中使用的名字是文件名和第二个是主类名称

+0

您应该使用格式化来减轻对答案的理解。 –

1

这是因为如果你在你的java文件中声明了,那么JAVA编译器相信你的系统中有相同的文件夹结构。 在你的情况Java编译器寻找一个包作为包,然后test.class。,或非常具体只是看看你的.class文件,你可以看到它寻找什么路径。请看看下面的图像(我我来说,我使用您好,测试仪)

.class

正如你可以看到图像路径你好/测试仪(我的案例),所以建筑应该像Hello- >测试仪。

如果你没有相同的体系结构,并且希望在编译时创建它,请使用javacp命令。