从命令行在包中运行java

use*_*339 29 java command-line javac classpath package

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

我有两个简单的课程,

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

而另一类是,

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

public class MyFrame extends JFrame
{
    public MyFrame()
    {
        setPreferredSize(new Dimension(400,560));
        setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Windows cmd中的基本文件夹"基本".我编译使用

basic> javac *.java -d .
Run Code Online (Sandbox Code Playgroud)

创建文件夹和子文件夹.

cd One
basic\One> java test
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 44

你将它运行为:

java One.Test
Run Code Online (Sandbox Code Playgroud)

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

在Java中哦,包名应该是小写,所以它应该是oneone.inner,不OneOne.Inner.只是一个惯例,但几乎每个人都遵循一个惯例.

  • 必须执行此操作的目录非常重要。我之前就弄错了。TY ......注意到了。我的错误印象是只有java内置的包必须是小的。 (2认同)
  • 哦,这是:`java -cp ../ one.Test`。我确信我以前已经尝试过。 (2认同)

Mat*_*ttC 14

如果目录是:

basic\One
Run Code Online (Sandbox Code Playgroud)

从包的基目录运行java:

basic>java One.test or basic>One.test <optional arguments>
Run Code Online (Sandbox Code Playgroud)

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

basic>java one.Test
Run Code Online (Sandbox Code Playgroud)

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

basic>java -cp . one.Test
or
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory  one.Test
Run Code Online (Sandbox Code Playgroud)


小智 5

以下 Haralan Dobrev 代​​码行解决了该问题。

java -cp ../ one.Test
Run Code Online (Sandbox Code Playgroud)