Запуск 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