Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从命令行在包中运行java_Java_Command Line_Package_Classpath_Javac - Fatal编程技术网

从命令行在包中运行java

从命令行在包中运行java,java,command-line,package,classpath,javac,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

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

我有两门简单的课

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测试
这会产生大量错误。许多答案都指向指定不起作用的完整路径。 我的类位于一个类中,因此使用-cp指定一个也不起作用。

您可以将其作为:

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

噢,Java中的包名应该是小写的,所以它应该是
one
one.inner
,而不是
one
one.inner
。这只是一个惯例,但几乎每个人都遵循它。

如果目录是:

basic\One
从包的基本目录运行java:

basic>java One.test or basic>One.test <optional arguments>
如果您收到“不存在”消息,那么java命令无法找到您在类中引用的类。您可以使用-cp选项来指向它们(“.”表示“此处”,您可以在Windows上添加任意多的位置,并在Linux上添加“;”和“:”


在使用包创建类时,如果要从cmd运行该类,则必须创建一个与包同名的目录,将.class放入其中,然后可以轻松运行该类。例如,如果创建了一个名为“one”的类,并且在名为pack的包中创建了该类,则必须运行以下命令

1 javac one.java
编译后,使用名称pack创建目录,然后运行此命令
2 java pack.one
注:
所有这些都必须在当前工作目录中完成,我在这里选择“one”作为文件名和主类名
我们都知道第一个命令中使用的第一个名称是文件名,第二个名称是主类名,这是因为如果您在java文件中声明,那么java编译器认为您的系统中有相同的文件夹体系结构。 在您的例子中,Java编译器将其作为一个包进行查找,然后测试.class.,或者更具体地说,只需查看.class文件内部,您就可以看到它所查找的路径。请看下图(我的案例我使用Hello和Tester)

正如您在图中看到的路径是Hello/Tester(我的示例),所以体系结构应该类似于Hello->Tester


如果您没有相同的体系结构,并且希望在编译时创建相同的体系结构,那么使用javacp命令

下面一行Haralan Dobrev代码解决了这个问题

java -cp ../ one.Test

必须从其中完成的目录非常重要。我早些时候弄错了。泰……注意到。我错误地认为只有Java的内置包必须是小的。有没有办法从同一个目录运行它?例如,通过命令行选项指定工作目录?我搜索了很多,每个人都说“只需向上一个方向”,但在某些情况下,这真的很烦人。哦,在这里:
java-cp../one.Test
。我确信我以前试过。是的-在Java应用程序启动器
Java
man
文件中,它声明:“默认情况下,没有选项的第一个参数是要调用的类的名称。应该使用完全限定的类名。”我认为他们应该将此更改为“必须使用完全限定的类名”!带有-cp标志的示例非常有用+1谢谢,这很有帮助。你应该使用格式来简化对答案的理解。只需添加一些关于问题的好东西:
basic>java -cp . one.Test
or
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory  one.Test
java -cp ../ one.Test