Подтвердить что ты не робот

Как запустить файл .class, который является частью пакета из cmd?

Я продолжаю получать ошибки, когда делаю свой .class частью package и пытаюсь запустить его из cmd.

Вот код, который работает после использования javac а затем java:

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

а затем код, который не работает:

package com;

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

выдает мне эту ошибку после попытки запустить программу с помощью команды: java HelloWorld:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: com/HelloWorld)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

Вот что я пытался сделать до сих пор:

java -cp . HelloWorld
java -cp . com.HelloWorld
java -cp . com/HelloWorld
java HelloWorld
java com.HelloWorld
java com/HelloWorld

Имейте в виду, что javac возвращается без ошибок и что просто удаляет package com; решает проблему. Иногда в других сценариях я получаю сообщение об ошибке, в котором говорится, что файл основного класса не найден или что-то в этом роде.

Что я делаю неправильно?

4b9b3361

Ответ 1

Предположим, вы сделали cd C: /projects и HelloWorld.class находится в C: /projects/com, затем просто наберите:

java com.HelloWorld

Ответ 2

Пакеты напрямую связаны с ожидаемым расположением каталога файла.

То есть, если у вас есть исходный файл с директивой пакета com, ожидается, что файл будет находиться в каталоге com.

В вашем примере HelloWorld ожидается, что файл HelloWorld.java будет сохранен в каталоге com, например com\HelloWorld.java

Когда вы скомпилируете файл, он создаст файл класса с именем HelloWorld.class в каталоге com, например com\HelloWorld.class

Таким образом, когда Java ищет класс com.HelloWorld, он фактически будет искать путь класса и добавляет к нему com\HelloWorld.class до тех пор, пока не найдет ваш файл класса или не закончит путь класса

Пример

Итак, я скопировал пример HelloWorld.java (с пакетом) на C:\java\com\HelloWord.java

Из командной строки я перешел в каталог C:\java...

C:\java>dir com
 Volume in drive C is OS
 Volume Serial Number is ####-####

 Directory of C:\java\com

09/08/2013  01:55 PM    <DIR>          .
09/08/2013  01:55 PM    <DIR>          ..
09/08/2013  01:55 PM               135 HelloWorld.java

Затем я скомпилировал HelloWorld.java

C:\java>javac com\HelloWorld.java

Затем я запустил его...

C:\java>java com.HelloWorld
Hello World!

Вам может потребоваться прочитать Packages учебник

Ответ 3

Синтаксис:

java -classpath /path/to/package-folder <packageName>.<MainClassName>

Итак, вы можете попробовать: java com.HelloWorld, который ожидал бы, что файл com/HelloWorld.class будет присутствовать как путь к классам по умолчанию, указывает на текущий каталог (если не указан).

Если вы находитесь в другой папке, попробуйте указать classpath:

$ CLASSPATH=/path/to/package-folder/ java com.HelloWorld
Hello World!
$ java -cp /path/to/package-folder/ com.HelloWorld
Hello World!
$ cd /path/to/package-folder/ && java com.HelloWorld
Hello World!

Для получения дополнительных пояснений проверьте: Как запустить файлы Java.class?

Ответ 4

Запустите программу из родительского каталога каталога com.

java com.HelloWorld

Ответ 5

Предположим, файл находится в C: /projects/com/HelloWorld, и вы можете попробовать следующие способы.

1. java -cp c: /projects com.HelloWorld

2. cd c: /projects
java com.HelloWorld
(Пример 2 не работает во многих ситуациях, таких как процесс Java.)

если нет объявления пакета и будут небольшие изменения.

1. java -cp c: /projects/com HelloWorld

2. cd c: /projects/com
java HelloWorld
(Это не хорошо по той же причине.)

Альтернативно, относительный путь будет в порядке, но есть некоторый риск. Последнее помните, поместите файл класса в конец cmd.

Ответ 6

Когда вы компилируете java-код, используйте -d, в вашем случае это будет

javac -d . com.HelloWorld.java

После указанной выше команды java-компилятор сгенерирует папку с именем "com", в папке "com" ​​вы увидите свой HelloWorld.class

Затем в той же папке, где вы запускаете javac, запустите следующую команду

java com.HelloWorld

Ответ 7

Попробуйте использовать абсолютный каталог или поместите свой HelloWorld.class в. \last_directory\com

1. java -cp .......\last_directory com.HelloWorld
2. java -cp .......\last_directory HelloWorld(with created com)

Ответ 8

Создайте папку с именем com в папке Java и поместите папку HelloWorld.java в com. Затем снова запустите javac и java.

Ответ 9

Вам не нужен флаг -cp при запуске java-класса, -cp, необходимый при запуске класса или основной программы из двоичного файла (jar). При запуске основной программы из командной строки вам нужно убедиться, что у вас есть класс в той же структуре папок, что и имя пакета в java файле, например

home/user/foo java com.test.className   

here classNmae class file and exist under home/user/foo/com/test

надеюсь, что это поможет.

Ответ 10

Может возникнуть такая проблема, когда вы выполняете команду "java" непосредственно из папки ваших файлов ".class". Эта команда должна быть выполнена из родительского каталога проекта. Все это хорошо объяснено в следующей статье:

http://javarevisited.blogspot.de/2015/04/error-could-not-find-or-load-main-class-helloworld-java.html

Ответ 11

Сначала вы должны скомпилировать его, набрав эту команду в CMD, например, ваш файл находится в каталоге c:\directory:

C:\com>javac HelloWorld.java

После этого вы можете запустить результат, набрав:

c:\com>java HelloWorld