我正在學習java包。我成功創建了包含單個.class文件Hello.class的軟件包。現在我想將另一個類文件添加到同一個包中。我將新的java類命名爲Goodbye.java,並將其編譯到相同的目錄「pack」中,通過添加類到包
javac -d ./bin Goodbye.java
命令。 bin目錄包含包目錄。 該I經由
javac -cp ./bin test.java
命令編譯包含主函數test.java文件。編譯工作正常。但是當我輸入時
java test
命令。我得到
Hello, world
Exception in thread "main" java.lang.NoClassDefFoundError: pack/Goodbye
at test.main(test.java:9)
Caused by: java.lang.ClassNotFoundException: pack.Goodbye
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 1 more
任何人都可以解釋我在這種情況下做錯了什麼嗎?我正在研究ubuntu 14.04並在終端中做所有事情。
兩個Hello.java和Goodbye.java文件位於
/home/username/apps/src
目錄。對應的類文件在裏面
/home/username/apps/bin/pack
目錄。包目錄由
創建javac -d ./bin
命令。 Hello.java文件的內容
package pack;
public class Hello
{
public static void HelloMessage()
{
System.out.println("hello, world");
}
}
它工作正常。對於其對應的類文件被加載Goodbye.java文件 內容是進口包位於/家/用戶名
package pack;
public class Goodbye
{
public static void message()
{
System.out.println("bye");
}
}
test.java文件/ apps目錄。它具有以下幾行代碼
import pack.*;
public class test
{
public static void main(String args[])
{
Hello.HelloMessage();
Goodbye.message();
}
}
任何幫助,高度讚賞。
但是,爲什麼不使用IDE?這會讓你的工作更輕鬆。 – Hackerdarshi
我有C++背景,習慣了終端。我不喜歡IDE的未知共振 –
我認爲,這是很好的想知道,它是如何真正在命令行工作。這最終會提供更深入的理解,即使在以後只使用IDE時也是如此。 – vanje