从命令行运行包中的java
Posted
技术标签:
【中文标题】从命令行运行包中的java【英文标题】:Running java in package from command line 【发布时间】:2013-10-26 08:02:54 【问题描述】:我已阅读之前发布的问题。有些含糊不清,没有一个能解决我的问题,所以我不得不再次询问。
我有两个简单的类,
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 也不起作用。
【问题讨论】:
只是为了添加一些关于这个问题的好东西:webucator.com/how-to/how-compile-packages-java.cfm 【参考方案1】:你可以这样运行它:
java One.Test
...但来自 root 目录 (basic
),不是来自 One
目录。您始终指定完全限定的类名。
哦,Java 中的包名应该是小写的,所以应该是one
和one.inner
,而不是One
和One.Inner
。只是一个约定,但几乎每个人都遵循。
【讨论】:
必须从中完成的目录非常重要。我之前弄错了。TY....注意了。我的错误印象是只有 java 的内置包必须很小。 有没有办法从同一个目录运行它?例如,通过命令行选项指定工作目录?我为此搜索了很多,每个人都说“只上一个目录”,但在某些情况下真的很烦人。 哦,这里是:java -cp ../ one.Test
。我确定我以前尝试过。
是 - 在 Java 应用程序启动器 java
的 man
文件中,它声明:“默认情况下,第一个不带选项的参数是要调用的类的名称。应使用完全限定的类名。"我认为他们应该将其更改为“必须使用完全限定的类名必须”!【参考方案2】:
如果目录是:
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
【讨论】:
带有 -cp 标志的示例很有帮助。 +1 谢谢,很有帮助。【参考方案3】:在创建带有包的类时,如果您想从 cmd 运行它,您必须创建一个与包名称相同的目录,将 .class 放入其中,然后您可以轻松运行它,例如您创建了一个名为“ one" 并且这个类在包中名为 pack ,你必须运行这些命令
1 javac one.java 编译后创建一个名为 pack 的目录,然后运行此命令 2 java pack.one 注意: 所有这些都必须在当前工作目录中完成,我在这里选择了名称“one”作为文件名和主类名 我们都知道第一个命令中使用的第一个名称是文件名,第二个是主类名
【讨论】:
你应该使用格式来简化你的答案的理解。【参考方案4】:这是因为如果您在 java 文件中声明 package,那么 JAVA 编译器会认为您的系统中具有相同的文件夹架构。 在您的情况下,Java 编译器寻找 One 作为一个包,然后是 test.class。,或者更具体地说,只需查看您的 .class 文件,您就可以看到它在寻找什么路径。请查看下面的图片(我的情况是我使用 Hello 和 Tester)
您可以在图像中看到路径是 Hello/Tester(我的案例示例),因此架构应该类似于 Hello->Tester。
如果你没有相同的架构并且想在编译时创建相同的架构,那么使用 javacp 命令。
【讨论】:
【参考方案5】:下面这行 Haralan Dobrev 代码解决了这个问题。
java -cp ../ one.Test
【讨论】:
以上是关于从命令行运行包中的java的主要内容,如果未能解决你的问题,请参考以下文章