从命令行在包中运行java

时间:2013-10-17 17:28:14

标签: java command-line package classpath javac

我已阅读之前发布的问题。有些是模糊的,没有一个解决我的问题,所以我不得不再问。

我有两个简单的类,

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”。我用

编译
basic> javac *.java -d .

创建了一个文件夹和子文件夹。

cd One
basic\One> java test

这会产生一大堆错误。许多答案旨在指定不起作用的完整路径。 我的类在One中,所以指定一个使用-cp也不起作用。

5 个答案:

答案 0 :(得分:44)

你将它运行为:

java One.Test

...但是来自basic目录中的 root 目录(One), not 。您始终指定完全限定的类名。

哦,Java中的包名称应该是小写的,因此它应该是oneone.inner,而不是OneOne.Inner。只是一个惯例,但几乎所有人都遵循惯例。

答案 1 :(得分:13)

如果目录是:

basic\One

从包的基目录运行java:

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

(理想情况下,包将为小写,类为大写):

basic>java one.Test

如果你不存在&#39;消息,然后java命令找不到您在类中引用的类。您可以使用-cp选项指向他们(&#39;。&#39;表示&#39;此处&#39;,您可以添加任意数量的地方除以&#39;;&#39;&#39; ;在Windows和&#39;:&#39;在Linux上)。

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

答案 2 :(得分:2)

这是因为如果您在java文件中声明 package ,那么JAVA编译器相信您的系统中具有相同的文件夹架构。 在你的情况下,Java编译器将One作为一个包,然后是test.class。,或者非常具体地查看你的.class文件,你可以看到它寻找的路径。请查看下面的图片(我的情况下我使用Hello和Tester)

.class

正如您所看到的,图像中的路径是Hello / Tester(我的案例),因此架构应该像Hello-&gt; Tester。

如果您没有相同的架构并且想在编译时创建相同的架构,那么请使用javacp命令。

答案 3 :(得分:1)

在创建带有包的类时,如果要从cmd运行它,则必须创建一个包含相同名称的包的目录,然后将.class放入其中,然后您可以轻松运行它,例如您创建了一个名为“的类”一个“和包含名称包的这个类,你必须运行这些命令

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

答案 4 :(得分:0)

下面的Haralan Dobrev代码行解决了该问题。

public class Example
{
   static String name;

   public static void main(String[] args)
   {
        Example.name = "Vince";
        System.out.println(Example.name) // will print "Vince"

        name = "Tony";
        System.out.println(name); // will still print "Tony"

        System.out.println(Example.name); // will print "Tony"
    }
}
相关问题