Як запустити файли .class Java?


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.


9
На додаток до відповіді Ісаака на вашу проблему. Це може бути гарною ідеєю писати "java" малими літерами, оскільки регістр верхнього регістру працює лише на MS Windows.
Hendrik Brummermann

Відповіді:


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 не працюватиме, якщо скомпільований файл був затуманений.


2

Це може означати багато речей, але найпоширенішим є те, що клас, що міститься у файлі, не має того самого імені, що й сам файл. Отже, перевірте, чи ваш клас також називається HelloWorld2.


0
  1. Перейдіть до шляху, де ви зберегли файл Java, який потрібно скомпілювати.
  2. Замініть шлях, набравши cmd і натисніть клавішу Enter.
  3. З'явиться каталог командного рядка, що містить файл шляху, наприклад C:/blah/blah/foldercontainJava
  4. Введіть javac javafile.java
  5. Натисніть клавішу Enter. Він автоматично генерує файл класу Java

-3

Ви повинні поставити java з малими літерами, а ви повинні додати .class!

java HelloWorld2.class
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.