38

我已经阅读了之前发布的问题。有些含糊不清,没有一个能解决我的问题,所以我不得不再次问。

我有两个简单的课程,

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 指定 One 也不起作用。

4

5 回答 5

61

你会运行它:

java One.Test

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

哦,Java 中的包名应该是小写的,所以应该是oneand one.inner,而不是Oneand One.Inner。只是一个约定,但几乎每个人都遵循。

于 2013-10-17T17:29:43.030 回答
20

如果目录是:

basic\One

从包的基本目录运行 java:

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

(理想情况下,包是小写的,类是大写的):

basic>java one.Test

如果您收到“不存在”消息,则 java 命令无法找到您在类中引用的类。您可以使用 -cp 选项指向它们(“.”表示“此处”,您可以添加任意数量的位置,在 Windows 上用“;”分隔,在 Linux 上用“:”分隔)。

basic>java -cp . one.Test
or
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory  one.Test
于 2014-12-08T23:41:49.770 回答
5

下面的 Haralan Dobrev 代​​码行解决了这个问题。

java -cp ../ one.Test
于 2018-07-22T18:46:31.807 回答
2

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

。班级

正如您在图像中看到的路径是 Hello/Tester(我的案例示例),所以架构应该像 Hello->Tester。

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

于 2017-09-07T14:58:03.200 回答
2

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

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

于 2016-11-08T21:25:22.240 回答