从命令行运行包中的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
这会产生一大堆错误。 许多答案旨在指定不起作用的完整路径。 我的类在One中,因此指定一个使用-cp也不起作用。
你将它运行为:
java One.Test
…但是从根目录( basic
), 而不是从One
目录。 您始终指定完全限定的类名。
哦,Java中的包名应该是小写的,所以它应该是one
和one.inner
,而不是One
和One.Inner
。 只是一个惯例,但几乎每个人都遵循。
如果目录是:
basic\One
从包的基目录运行java:
basic>java One.test or basic>One.test
(理想情况下,包将为小写,类为大写):
basic>java one.Test
如果您收到“不存在”消息,则java命令无法找到您在类中引用的类。 您可以使用-cp选项指向它们(’。’表示’此处’,您可以添加任意数量的地方除以’;’在Windows上和’:’在Linux上)。
basic>java -cp . one.Test or basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory one.Test
这是因为如果您在java文件中声明包 ,那么JAVA编译器相信您在系统中具有相同的文件夹体系结构。 在你的情况下,Java编译器将One作为一个包然后是test.class。,或者非常具体地查看你的.class文件,你可以看到它寻找的路径。 请看下面的图片(我的情况下我使用Hello和Tester)
正如您所看到的,图像中的路径是Hello / Tester(我的案例),因此架构应该像Hello-> Tester。
如果您没有相同的架构并且想要在编译时创建相同的架构,那么请使用javacp命令。
如果你想从cmd运行一个包,你创建一个包含相同名称的包的目录,然后将.class放入其中,然后你可以轻松地运行它,例如你创建了一个名为“one”的类,在包含名称包的这个类中,必须运行这些命令
1 javac one.java
编译后创建一个名为pack的目录,然后运行此命令
2 java pack.one
注意:
所有这些必须在当前工作目录中完成,名称“一”我在这里选择它作为文件名和主类名我们都知道第一个命令中使用的第一个名称是文件名,第二个是主类名
Haralan Dobrev代码的以下行解决了这个问题。
java -cp ../ one.Test