Я хочу скомпилировать и выполнить эту программу с помощью команд "javac" и "java":
package mypackage;
public class Myclass {
public static void main(String[] args){
System.out.println("test");
}
}
Проблема у меня есть: Когда я нахожусь в папке "mypackage" и использую в ней "javac", он создает файл "Myclass.class". Но когда я использую команду «java Myclass» (я все еще нахожусь в папке «mypackage»), у меня появляется это сообщение:
Error: Could not find or load main class Myclass
Caused by : java.lang.NoClassDefFoundError: mypackage/Myclass (wrong name: Myclass)
Решение, которое я нашел: Я не должен заходить в папку "mypackage" и выполнять "java Myclass", а переходить на одну папку вверх и выполнять "java mypackage.Myclass" (это работает). https://stackoverflow.com/a/7509317/10104743
Мой вопрос : Я вижу некоторых людей, которые могут запускать команды "javac Myclass.java" и "java Myclass" напрямую, без необходимости переходить на одну папку вверх, как это сделал я. Почему у меня не работает и что я могу сделать, чтобы это исправить?
Вы должны быть в каталоге, который содержитmypackage, и вы должны выдать javac mypackage/Myclass.java и java mypackage.Myclass. То, что вы видели, работает, только если нет оператора package.
Если вы не укажете пакет в своем исходном коде, вы можете использовать 'javac MyClass.java' для компиляции в каталоге, содержащем исходный код, и вы можете использовать 'java MyClass' для его выполнения в этом каталоге.




Вы указали имя пакета для своего класса (
mypackage), поэтомуjavaожидает найтиMyclassв каталоге с именемmypackage.