Java- problem z uruchomieniem pliku *.class


(Subskrybent) #1

Utworzyłem plik java: Main.java , skompilowałem go (poprzez konsole), został utworzony plik Main.class , teraz żeby uruchomić program wpisuje: java Main , i zamiast uruchomić program otrzymuje komunikat: "Exception in thread "main" java.lang.NoClassDefFoundError: Main". Teraz moje pytanie, co mam zrobić, żeby uruchomić ten nieszczęsny programik? Brakuje jakiejś biblioteki (w co wątpie), czy coś musze zmienić?

Oto kod programu:

public

class Main

  { public static void main (String args[])

	{System.out.println ("pierwszy program w javie");

	}

  }

PS. Mam zainstalowany pakiet jdk1.6.0_03

Mój system operacyjny: Windows XP


(andrzej20) #2

Ja miałem taki sam problem. Udało mi się go rozwiązać przez przypadek.

Pa reinstalacji Windows (XP) zainstalowałem ponownie JDK. Wcześniej miałem wiele wersji JDK, dodatkowo zainstalowany NetBeans. Być może masz konflikt wersji javy. Mam ten sam pakiet jdk1.6.0_03 co Ty. Spróbuj odinstalować NetBeans'a jeśli go masz zainstalowanego. Jeśli go nie masz zainstalowanego to nie wiem jak Ci pomóc.


(Airborn) #3

a zobacz tak:

public class Main{

	public static void main(String[] args) {

		try {

			System.out.println ("Pierwszy program w Javie");

		} catch (Exception e){

			System.out.println ("Uwaga wystąpił wyjątek, program zostanie zatrzymany");

		}

	}

}

średnio bym się zdziwił, gdyby przeniesienie public do linii wyżej przestało odpowiadać kompilatorowi :wink: Złączono Posta : 08.10.2007 (Pon) 21:40a zobacz tak:

public class Main{

	public static void main(String[] args) {

		try {

			System.out.println ("Pierwszy program w Javie");

		} catch (Exception e){

			System.out.println ("Uwaga wystąpił wyjątek, program zostanie zatrzymany");

		}

	}

}

średnio bym się zdziwił, gdyby przeniesienie public do linii wyżej przestało odpowiadać kompilatorowi :wink:


(Subskrybent) #4

Airborn:

Próbowałem z tym kodem, ale dalej ten sam komunikat:

"Exception in thread "main" java.lang.NoClassDefFoundError: Main"

W sumie to komilacja przebiega poprawnie (w jej wyniku otrzymuje plik Main.class).

andrzej20 :

Usunąłem jave, wyczyściłem rejestr, zainstalowałem od nowa jdk, ale nie uruchamia się dalej :frowning:


(GL1zdA) #5

Rozumiem trzaskasz spod konsoli? A jak wywolujesz java Main to jestes w katalogu, w ktorym znajduje sie Main.class? Bo jesli nie to musisz do niego przejsc, jesli tak chcesz to uruchamiac. Twoj kod jest jak najbardziej poprawny.


(Subskrybent) #6

Spod konsoli to robie, i właśnie o to chodzi, że jestem w katalogu tym co jest Main.class. Nie mam pojęcia czemu się tak dzieje, robie po kolei wszystko tak jak pisze w książce i uruchomić się nie chce (kompiluje dobrze).

Z classpath to chyba nic nie musze robić?


(GL1zdA) #7

Z ciekawosci. Wpisz w konsoli:

set classpath

przed odpaleniem programu i napisz co ci wypisal w odpowiedzi


(Subskrybent) #8

Po wpisaniu set classpath dostaje komunikat:

CLASSPATH=E:\Program Files\QuickTime\QTSystem\QTJava.zip

Czyli chyba musze ustawić classpath na katalog z plikem class?


(GL1zdA) #9

Sprobuj wpisac przed uruchomieniem, oczywiscie caly czas w katalogu z twoim plikiem .class:

set classpath=%classpath%;.;

(koniecznie bez spacji przy '=' i z koncowka ';.;')

Jesli zadziala to napisz, to powiem ci jak ustawic to na stale (chyba, ze wiesz).


(Subskrybent) #10

Działa :mrgreen:, wielkie dzięki GL1zdA. Będe wdzięczny jak jeszcze opiszesz jak ustawić na stałe classpath.


(GL1zdA) #11

Najpierw nacisnij [Win]+[Pause].

Przejdz do zakladki zaawansowane.

Na samym dole masz zmienne srodowiskowe.

W dolnym okienku znajdz CLASSPATH i kliknij edytuj.

Na samym poczatku dodaj .;

OK, OK, OK - powinno zachowac wszystkie zmiany. (odpal NOWE okienko konsoli i wpisz SET classpath - powinien sie pojawic uaktualniony wpis).

PS. Nie wiem czemu QuickTime tam cokolwiek namieszal...


(Subskrybent) #12

OK :stuck_out_tongue: , wszystko pięknie działa, jeszcze raz wielkie dzięki :slight_smile: