Jak uruchomić Javę.akta klasowe?

Skompilowałem program HelloWorld i używam wiersza polecenia, aby go uruchomić. The .plik klasy nazywa się HelloWorld2.klasa

Plik znajduje się w C:\Users\Matt\workspace\HelloWorld2\bin Oto co dostaję po przejściu do wiersza polecenia i wpisaniu "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.

Spodziewałem się wydrukowania HelloWorld. Co robię źle? Mam zainstalowane JDK.

Author: Jonathon Faust, 2011-04-22

5 answers

Musisz ustawić classpath, aby znaleźć skompilowaną klasę:

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

 97
Author: Isaac Truett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-22 15:51:00

Aby uruchomić plik klasy Java z linii poleceń, składnia jest następująca:

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

Gdzie Nazwa pakietu (zwykle zaczyna się od com lub org) jest nazwą folderu, w którym znajduje się plik klasy.

Na przykład jeśli główną nazwą twojej klasy jest App, a Nazwa pakietu Java Twojej aplikacji to com.foo.app, to plik klasy musi znajdować się w folderze com/foo/app (osobny folder dla każdej kropki), więc uruchom aplikację jako:

$ java com.foo.app.App

Uwaga: $ wskazuje znak zachęty powłoki, ignoruj go podczas wpisywania

Jeśli twoja klasa nie ma zdefiniowanej nazwy package, po prostu uruchom jako: java App.

Jeśli masz jakieś inne zależności jar, upewnij się, że podałeś swój classpath parametr albo z -cp/-classpath lub za pomocą zmiennej CLASSPATH, która wskazuje na folder z jar/wojna/ucho/zip/pliki klasy . Więc na Linuksie możesz przedrostek polecenia: CLASSPATH=/path/to/jars, na Windows musisz dodać folder do zmiennej systemowej. Jeśli nie jest ustawiona, ścieżka klasy użytkownika składa się z bieżącego katalogu (.).


Praktyczny przykład

Ponieważ stworzyliśmy przykładowy projekt używając Maven jako:

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

I skompilowaliśmy nasz projekt przez mvn compile w naszym katalogu my-app/, wygeneruje on plik naszej klasy w target/classes/com/foo/app/App.class.

Aby go uruchomić, możemy albo określić ścieżkę klasy poprzez -cp lub przejść do niej bezpośrednio, sprawdź przykłady poniżej:

$ 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!

To double check nazwa twojej klasy i pakietu, możesz użyć narzędzia Java class file disassembler, np.:

$ 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[]);
}

Uwaga: javap nie będzie działać, jeśli skompilowany plik został zaciemniony.

 43
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 22:50:56

Może to oznaczać wiele rzeczy, ale najczęściej jest to, że Klasa zawarta w pliku nie ma tej samej nazwy co sam plik. Sprawdź więc, czy Twoja klasa również nazywa się HelloWorld2.

 2
Author: Federico Vera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-22 16:07:23
  1. Przejdź do ścieżki, na której zapisałeś plik java, który chcesz skompilować.
  2. Zastąp ścieżkę wpisując cmd i naciśnij enter.
  3. Pojawi Się Katalog wiersza polecenia zawierający plik ścieżki jak C:/blah/blah/foldercontainJava
  4. Enter javac javafile.java
  5. Naciśnij Enter. Automatycznie wygeneruje plik klasy java
 -1
Author: odunstory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-19 16:21:03

Musisz umieścić Javę małymi literami i musisz dodać .Klasa!

java HelloWorld2.class
 -3
Author: Corni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-10 15:34:17