我写了一个简单的程序包:
//A simple package
package MyPack
class Balance
{
String name;
double bal;
Balance(String n, double b)
{
name=n;
bal=b;
}
void show()
{
if(bal<0)
System.out.println("-->");
System.out.println(name+ ": $:" +bal);
}
}
class AccountBalance
{
public static void main(String args[])
{
Balance current[]=new Balance[3];
current[0]=new Balance("A.K.Juwatkar",123.123);
current[1]=new Balance("A.P.Dhoke",345.67);
current[2]=new Balance("Anil Sarang",100.98);
for(int i=0;i<3;i++)
current[i].show();
}
}
我使用的是Ubuntu 10.04&amp; 当我使用
编译它时java MyPack.AccountBalance
我收到以下消息:
Exception in thread "main" java.lang.NoClassDefFoundError: MyPack/AccountBalance
Caused by: java.lang.ClassNotFoundException: MyPack.AccountBalance
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: MyPack.AccountBalance. Program will exit.
有什么问题?请帮帮我。 我已经安装了openjdk,我还需要安装其他东西吗? 我正在使用Ubuntu 10.04,请帮助我
答案 0 :(得分:36)
最好是从包外编译和运行类:
首先用javac编译:
$javac MyPack/AccountBalance.java
这将在MyPack文件夹中创建一个名为AccountBalance.class
的新文件然后你可以运行它:
$java MyPack.AccountBalance
顺便说一下:不鼓励包裹名称以大写字母开头。
答案 1 :(得分:15)
当您尝试编译java类时,请使用'-d'选项(destination)指定.class文件的位置。
javac -d "classes" AccountBalance.java
当您运行程序时,请确保类路径中包含相同的文件夹:
java -classpath "classes" MyPack.AccountBalance
答案 2 :(得分:5)
尝试创建名为MyPack
的文件夹并在其中移动.class文件,或使用以下命令行编译java代码,并将.class文件移动到MyPack
文件夹中。
javac YourFileName.java -d .
并使用
运行java MyPack.AccountBalance
查看javac工具
从工具doc:默认情况下,编译器将每个类文件放在同一目录中 它的源文件。您可以使用指定单独的目标目录 -d(参见下面的选项)。
和package教程。
答案 3 :(得分:3)
如果您经常通过javac
和java
命令进行编译和运行,请使用
javac MyJavaClass.java && java MyJavaClass
这将编译该类,然后运行刚刚编译的类。
注意:如果使用Windows PowerShell,请将&&
替换为;
。