Вопрос по java – Как скомпилировать пакеты в Java?

23

Я написал простую пакетную программу:

  //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, пожалуйста, помогите мне

Вы импортировали mypack.Balance в баланс счета? Siva Charan
shivasoft.in/blog/java/… Maddy
ntu.edu.sg/home/ehchua/programming/java/… Nikhil Chilwant

Ваш Ответ

4   ответа
5

Попробуйте создать папку с именемMyPack и переместите в него файлы .class или используйте следующую командную строку, чтобы скомпилировать код Java, и он переместит файлы .class вMyPack папка.

javac YourFileName.java -d .

и запустить с помощью,

java MyPack.AccountBalance

Посмотри наJavac инструмент

From the tool doc : By default, the compiler puts each class file in the same directory as its source file. You can specify a separate destination directory with -d (see Options, below).

а такжепакет руководство.

@ user1388626 затем выйдите из этой папки (обратно к родителю MyPack) и запустите & gt; java MyPack.AccountBalance
Я поместил файл AccountBalance.java в папку MyPack user1388626
Я скомпилировал javac AccountBalance.java там не было ошибок, но когда я попытался запустить с использованием java MyPack.AccountBalance, я получил следующее сообщение: user1388626
@ user1388626 Вам нужно создать папку MyPack и переместить в нее Balance.class и AccountBalance.class. Или используйте ключ -d, чтобы инструмент javac создал папку пакета.
15

Когда вы пытаетесь скомпилировать класс java, используйте «-a»; опция (назначение), чтобы указать, где должны быть расположены файлы .class.

javac -d "classes" AccountBalance.java

и когда вы запускаете вашу программу, убедитесь, что та же папка включена в ваш путь к классу:

java -classpath "classes" MyPack.AccountBalance
36

Лучше всего скомпилировать и запустить классы вне пакетов:

Сначала вы компилируете с javac:

$javac MyPack/AccountBalance.java

это создаст новый файл в папке MyPack с именем AccountBalance.class

тогда вы можете запустить его:

$java MyPack.AccountBalance

Кстати, не рекомендуется, чтобы имена пакетов начинались с заглавной буквы.

Большое спасибо, это сработало .... Большое спасибо user1388626
3

Если вы часто компилируете и запускаете черезjavac а такжеjava команды затем используют

javac MyJavaClass.java && java MyJavaClass

Это скомпилирует класс, а затем запустит только что скомпилированный класс.

Примечание: заменить&& с; если используется Windows powershell.

сjava вам не нужно указывать команду.class расширение, но только полное имя класса, содержащегоmain метод
@ user2340612 Хорошо, спасибо, исправлено.
Windows также использует этот синтаксис.
@Nahiyan Windows cmd использует этот синтаксис, но Windows PowerShell использует; выполнить одну команду за другой. Обновил мой ответ еще раз.

Похожие вопросы