импортное имя пакета. * не работает - PullRequest
1 голос
/ 07 февраля 2011

Я написал следующий код:

package abc.def;

public class test {

public void test() {}
public void disp() {
 System.out.println("in disp");
}

}

тогда я использовал следующую команду для компиляции:

javac -d . test.java

работает нормально, но когда я пытался импортировать класс «test» с помощью «import abc.def. *», Он не импортирует класс test, код:

import abc.def.*;


public class checktest {

 public static void main(String a[]) {

 test t = new test();

}

}

генерируется следующая ошибка:

D:\javaprograms>javac  checktest.java
checktest.java:8: cannot access test
bad class file: .\test.java
file does not contain class test
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
 test t = new test();
 ^
1 error

Ответы [ 5 ]

1 голос
/ 18 апреля 2011

У меня тоже была такая же проблема.

Для установки не требуется дополнительного classpath.

В соответствии с вашим сценарием, ваш рабочий каталог может содержать файл test.java.Вы можете просто удалить файл test.java из рабочего каталога и скомпилировать его с помощью javac checktest.java.

Это будет работать.

Спасибо.Britto

1 голос
/ 08 февраля 2011

Ваша структура каталогов должна выглядеть следующим образом:

  • текущий рабочий каталог
    • checktest.java
    • abc
      • def
        • test.java

Затем из каталога в верхней части вы можете скомпилировать контрольный тест:

  javac checktest.java

Это также автоматически найдет (и скомпилирует) test.java.Если вы хотите только скомпилировать тест, сделайте это следующим образом:

  javac abc/def/test.java

Тогда все файлы классов также будут в нужных каталогах.

1 голос
/ 07 февраля 2011

Вы сделали правильную структуру каталогов?Вам нужно иметь файл test.java в abc / def, если это имя пакета, которое вы хотите.

Вы также можете указать на скомпилированный файл test.class с -cp flag

Пример:

javac -cp контрольный тест

0 голосов
/ 27 апреля 2017

Кажется, что вы по ошибке скомпилировали test.java в самом верхнем каталоге, поэтому JVM выбирает test.class из самого верхнего каталога, а также из abc \ def \ test.class, следовательно, возникает конфликт.

пожалуйста, введите: ls test * в самом верхнем каталоге и подтвердите, если это так, удалите этот дополнительный test.class и затем перекомпилируйте.

0 голосов
/ 07 февраля 2011

сначала знайте это - Чтобы использовать пакет в других программах, скомпилируйте файлы .java как обычно, а затем переместите полученные файлы .class в соответствующий подкаталог одного из каталогов, на которые есть ссылки в вашей среде CLASSPATHпеременная.

Например, если / home / name / classes находится в вашем CLASSPATH, а ваш пакет называется package1, тогда вы создадите каталог с именем package1 в / home / name / classes и затем поместите все файлы .class впакет в / home / имя / классы / пакет1.

Теперь предположим, что ваш classpath - / home / name / classes, затем скомпилируйте

package abc.def;

public class test {

public void test() {} public void disp() { System.out.println("in disp"); }

}

, используя $ javac -d /home/name/classes test.java

Теперь введите этот код

import abc.def.*;

public class checktest {

public static void main(String a[]) {

test t = new test();

}

}

внутри папки

...