我已阅读之前发布的问题。有些是模糊的,没有一个解决我的问题,所以我不得不再问。
我有两个简单的类,
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也不起作用。
答案 0 :(得分:44)
你将它运行为:
java One.Test
...但是来自basic
目录中的 root 目录(One
), not 。您始终指定完全限定的类名。
哦,Java中的包名称应该是小写的,因此它应该是one
和one.inner
,而不是One
和One.Inner
。只是一个惯例,但几乎所有人都遵循惯例。
答案 1 :(得分:13)
如果目录是:
basic\One
从包的基目录运行java:
basic>java One.test or basic>One.test <optional arguments>
(理想情况下,包将为小写,类为大写):
basic>java one.Test
如果你不存在&#39;消息,然后java命令找不到您在类中引用的类。您可以使用-cp选项指向他们(&#39;。&#39;表示&#39;此处&#39;,您可以添加任意数量的地方除以&#39;;&#39;&#39; ;在Windows和&#39;:&#39;在Linux上)。
basic>java -cp . one.Test
or
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory one.Test
答案 2 :(得分:2)
这是因为如果您在java文件中声明 package ,那么JAVA编译器相信您的系统中具有相同的文件夹架构。 在你的情况下,Java编译器将One作为一个包,然后是test.class。,或者非常具体地查看你的.class文件,你可以看到它寻找的路径。请查看下面的图片(我的情况下我使用Hello和Tester)
正如您所看到的,图像中的路径是Hello / Tester(我的案例),因此架构应该像Hello-&gt; Tester。
如果您没有相同的架构并且想在编译时创建相同的架构,那么请使用javacp命令。
答案 3 :(得分:1)
在创建带有包的类时,如果要从cmd运行它,则必须创建一个包含相同名称的包的目录,然后将.class放入其中,然后您可以轻松运行它,例如您创建了一个名为“的类”一个“和包含名称包的这个类,你必须运行这些命令
1 javac one.java
编译后创建一个名为pack的目录,之后运行此命令
2 java pack.one
注:
所有这些必须在当前工作目录中完成,名称“一”我在这里选择它作为文件名和主类名
我们都知道第一个命令中使用的第一个名字是文件名,第二个名字是主类名
答案 4 :(得分:0)
下面的Haralan Dobrev代码行解决了该问题。
public class Example
{
static String name;
public static void main(String[] args)
{
Example.name = "Vince";
System.out.println(Example.name) // will print "Vince"
name = "Tony";
System.out.println(name); // will still print "Tony"
System.out.println(Example.name); // will print "Tony"
}
}