Как запустить файлы Java .class?

81

Я скомпилировал программу HelloWorld и использую командную строку для ее запуска. Файл .class называется HelloWorld2.class.

Файл находится в папке C: \ Users \ Matt \ workspace \ HelloWorld2 \ bin Вот что я получаю, когда захожу в командную строку и набираю «Java HelloWorld2»:

C:\Users\Matt>Java HelloWorld2
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld2
Caused by: java.lang.ClassNotFoundException: HelloWorld2
        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)
Could not find the main class: HelloWorld2.  Program will exit.

Я ожидал увидеть распечатанный HelloWorld. Что я делаю неправильно? У меня установлен JDK.

Skizz
источник
9
В дополнение к ответу Исаака на вашу проблему. Может быть хорошей идеей написать «java» в нижнем регистре, потому что верхний регистр работает только в MS Windows.
Хендрик Бруммерманн

Ответы:

95

Вам нужно установить путь к классам, чтобы найти свой скомпилированный класс:

java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2

Исаак Труетт
источник
Он отлично работает из любой точки моей файловой структуры. Просто поместите путь к скомпилированному классу в параметр -cp, а затем имя скомпилированного класса без какого-либо пути. Вы также можете запустить этот класс без параметра -cp, если вы находитесь в той же папке, что и ваш скомпилированный класс.
Вацлав
42

Чтобы запустить файл класса Java из командной строки, используйте следующий синтаксис:

java -classpath /path/to/jars <packageName>.<MainClassName>

где packageName (обычно начинается с comили org) - это имя папки, в которой находится ваш файл класса.

Например, если ваше основное имя класса - приложение, а имя пакета Java вашего приложения - com.foo.appто ваш файл класса должен находиться в com/foo/appпапке (отдельная папка для каждой точки), поэтому вы запускаете свое приложение как:

$ java com.foo.app.App

Примечание: $указывает приглашение оболочки, игнорируйте его при вводе

Если ваш класс не имеет packageимени определенные, просто работать как: java App.

Если у вас есть какие-либо другие зависимости jar, убедитесь, что вы указали свой параметр classpath с помощью -cp/ -classpathили с помощью CLASSPATHпеременной, которая указывает на папку с вашими файлами jar / war / ear / zip / class . Итак, в Linux вы можете префикс команды:, CLASSPATH=/path/to/jarsв Windows вам нужно добавить папку в системную переменную. Если не задан, путь к пользовательскому классу состоит из текущего каталога ( .).


Практический пример

Учитывая, что мы создали образец проекта, используя Maven как:

$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

и мы скомпилировали наш проект mvn compileв нашем my-app/каталоге, он сгенерирует наш файл класса target/classes/com/foo/app/App.class.

Чтобы запустить его, мы можем либо указать путь к классу, -cpлибо перейти к нему напрямую, посмотрите примеры ниже:

$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!

Чтобы дважды проверить свой класс и имя пакета, вы можете использовать инструмент дизассемблера файлов классов Java, например:

$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
  public com.foo.app.App();
  public static void main(java.lang.String[]);
}

Примечание: javapне будет работать, если скомпилированный файл был запутан.

Kenorb
источник
2

Это может означать множество вещей, но наиболее распространенным является то, что класс, содержащийся в файле, не имеет того же имени, что и сам файл. Итак, проверьте, называется ли ваш класс также HelloWorld2.

Федерико Вера
источник
0
  1. Перейдите по пути, по которому вы сохранили файл java, который хотите скомпилировать.
  2. Замените путь, набрав cmd и нажмите Enter.
  3. Появится каталог командной строки, содержащий путь к файлу, например C:/blah/blah/foldercontainJava
  4. Войти javac javafile.java
  5. Нажмите Ввод. Он автоматически сгенерирует файл класса Java
odunstory
источник
-3

Вы должны указать java в нижнем регистре и добавить .class!

java HelloWorld2.class
Corni
источник