Запуск Java в пакете из командной строки
Я прочитал ранее размещенные вопросы. Некоторые расплывчаты, и никто не решил мою проблему, поэтому я вынужден снова спросить.
У меня есть два простых класса,
package One;
import One.Inner.MyFrame;
public class test
{
public static void main(String args[])
{
MyFrame f= new MyFrame();
}
}
И другой класс,
package One.Inner;
import java.awt.*;
import javax.swing.*;
public class MyFrame extends JFrame
{
public MyFrame()
{
setPreferredSize(new Dimension(400,560));
setVisible(true);
}
}
Я в базовой папке "basic" в Windows cmd. Я скомпилирую, используя
basic> javac *.java -d .
Создается папка и подпапка.
cd One
basic\One> java test
Это создает большой набор ошибок. Многие ответы направлены на то, чтобы указать полный путь, который не сработал. Мои классы находятся в One, поэтому указание на использование с помощью -cp тоже не работает.
Ответы
Ответ 1
Вы запустите его как:
java One.Test
... но из корневого каталога (basic
), а не из One
каталога. Вы всегда указываете полное имя класса.
О, и имена пакетов в Java должны быть в нижнем регистре, поэтому он должен быть one
и one
one.inner
, а не One
и One.Inner
. Просто конвенция, но та, которую придерживаются почти все.
Ответ 2
Если каталог:
basic\One
Запустите java из базового каталога пакета:
basic>java One.test or basic>One.test <optional arguments>
(в идеале пакет будет иметь нижний регистр и верхний регистр класса):
basic>java one.Test
Если вы получаете сообщения "не существует", команда java не может найти классы, на которые вы ссылались в своем классе. Вы можете указать на них с помощью опции -cp ("." Означает "здесь", и вы можете добавить столько мест, сколько хотите, разделенных ";" на Windows и ":" на Linux).
basic>java -cp . one.Test
or
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory one.Test
Ответ 3
Это связано с тем, что если вы объявляете пакет в своем java файле, компилятор JAVA полагает, что у вас такая же архитектура папок в вашей системе. В вашем случае компилятор Java ищет One как пакет, а затем test.class., Или, чтобы быть очень конкретным, просто загляните в свой.class файл, вы увидите, какой путь он ищет. Пожалуйста, обратите внимание ниже. (В моем случае я использую Hello and Tester)
![.class]()
Как вы видите путь на изображении - это Hello/Tester (пример моего примера), поэтому архитектура должна быть как Hello-> Tester.
И если у вас нет такой же архитектуры и вы хотите создать ее при компиляции, используйте команду javacp.
Ответ 4
при создании класса с пакетом, если вы хотите запустить его из cmd, вы должны создать каталог с таким же именем пакета, помещая в него.class, а затем вы можете легко запустить его, например, вы создали класс с именем "один" и этот класс в пакете с пакетом имен, вы должны запустить эти команды
1 javac one.java
после компиляции создан каталог с пакетом имен, после этого запустите эту команду
2 java pack.one
Заметка:
все это должно быть сделано в текущем рабочем каталоге, а имя "один" я выбрал здесь как имя файла и имя основного класса, все мы знаем, что первое имя, используемое в первой команде, - это имя файла, а второе - имя основного класса
Ответ 5
Проблема решена в следующей строке кода Харалана Добрева.
java -cp ../ one.Test