Problem z kompilowaniem w javie na Win 7


(paranoise) #1

Witam, niedawno zacząłem uczyć się Javy, tyle że do tej pory na Ubuntu. Parę dni temu wróciłem do Windowsa i próbując zrobić podstawowy program za pomocą notatnika pojawił się u mnie problem. Otwieram notatnik: robię podstawowy program:

public
class Main
{
public static void main (String args[])
{
System.out.println (“Przykładowy tekst”);
}
}

zapisuję jako Main.java, wchodzę w terminal i w lokalizację pliku to jest na pulpit.

Wpisuję javac Main.java, a w odpowiedzi dostaję komunikat: file not found Main.Java.

Nie wiem o co chodzi, bo mam zainstalowane najnowsze JDK i szukając w innych tematach zrobiłem też:

Komputer -> PPM właściwości -> Zaawansowane ustawienia systemu -> Zmienne środowiskowe
Zmienne systemowe -> Nowa
Nazwa: CLASSPATH
Teraz zależy od tego co masz zainstalowane na dysku to wpisujesz do ścieżek:
JDK - Java Development Kit (cały pakiet programistyczny)
JRE - Java Runtime Environment
Wartość: C:\Program Files\Java\jdk_twoja_wersja\lib
np C:\Program Files\Java\jdk1.6.0_25\lib lub C:\Program Files\Java\jre6\lib
oraz
Nazwa: PATH
Wartość: C:\Program Files\Java\jdk_twoja_wersja\bin

Nie wiem czy to może mieć coś wspólnego, ale zanim spróbowałem robić coś w notatniku, korzystałem z Eclipse i idąc za radą jakiegoś tutoriala próbowałem tworzyć jakieś projekty zarządzane przez Mavena.

Jeśli ktoś wie jak mi pomóc, to proszę o podpowiedź i z góry dziękuję.

Pozdrawiam,
Tomek


(Fizyda) #2

Nie masz zmiennych środowiskowych i “inteligentny” Windows nie zna polecenia (programu) javac, musisz dodać zmienne systemowe jak sam opisałeś, albo kompilować mniej więcej w sposób:

C:\sciezka_do_kompilatora\javac Main.java

Kolejna opcja to przejść w terminalu do katalogu kompilatora i podać pełną ścieżkę do kompilowanego kodu:

javac “C:\sciezka_do_programu\Main.java”

Albo połączyć obie opcje i zrobić potworka:
C:\sciezka_do_kompilatora\javac “C:\sciezka_do_programu\Main.java”

W tedy kompilacja zadziała bez względu na to w jakiej lokalizacji się znajdujesz. Najwygodniej jednak dodać zmienne środowiskowe/systemowe. W linuxie nie musisz tego robić bo domyślnie program - javac wylądował w /bin w którym to system szuka programów które wywołujesz z poziomu terminala. Oczywiście są jeszcze inne katalogi w których szuka, ale javac najpewniej leży w /bin.


(paranoise) #3

No ok, ale jak dodać te zmienne środowiskowe/ systemowe? Jeśli chodzi o to co opisałem:

JDK - Java Development Kit (cały pakiet programistyczny)
JRE - Java Runtime Environment
Wartość: C:\Program Files\Java\jdk_twoja_wersja\lib
np C:\Program Files\Java\jdk1.6.0_25\lib lub C:\Program Files\Java\jre6\lib
oraz
Nazwa: PATH
Wartość: C:\Program Files\Java\jdk_twoja_wersja\bin

to zrobiłem to już, a pomimo tego pojawia się wspomniany komunikat.


(Fizyda) #4

Naprawdę pytasz o takie rzeczy … https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/

EDIT:
Podałem Ci linka do rozwiązania innego problemu tutaj masz to z czym Ty masz problem:
https://www.windows-commandline.com/javac-not-recognized-internal-external-command/


(kuba3351) #5

Nie prawda. Windows na tym polu nie jest wcale mniej inteligentny od Linuxa, Linux też korzysta ze zmiennej PATH a java działa z automatu tylko dlatego, że wszystkie pliki wykonywalne są tam w jednym miejscu.

Nie prawda że jest problem ze zmiennymi środowiskowymi. Gdyby tak było to komunikat byłby “javac nie jest rozpoznany jako polecenie lub plik wstadowy” a ty,czasem jest “File not found Main.java” co oznacza że kompilator się uruchamia i zgłasza błąd, że nie może znaleźć pliku do kompilacji.

Spróbuj podać pełną ścieżkę do pliku, prawdopodobnie polecenie wpisujesz ze złego katalogu, sprawdź komendą dir czy plik Main.java tam jest.


(Fizyda) #6

Masz rację, z góry założyłem że problem dotyczy braku zmiennej środowiskowej bo to najczęstszy problem z javą.


(Piesek64) #7

Nie jest przypadkiem tak, że zapisałeś plik jako Main.java.txt? Jeśli w dialogu zapisu pliku podajesz rozszerzenie (.java) przy nazwie pliku (Main), wybieraj filtrowanie “wszystkie typy” i dopiero wtedy dopisz rozszerzenie.

W Windowsie domyślnie ukrywane są rozszerzenia plików.


(paranoise) #8

Ok. Działa. Dzisiaj zacząłem jeszcze raz od początku w innym folderze i zadziałało, czyli prawdopodobnie gdzieś po drodze jakiś głupi błąd robiłem. Dzięki wszystkim. Pozdrawiam.


(paranoise) #9

A nie, nie działa. Bo o ile da się już stworzyć Main.class, to gdy chcę to uruchomić java Main.class, to pokazuje się komunikat "could not find or load main class Main Class. Dodawanie zmiennych środowiskowych nic na to nie pomogło. Dla jasności w zmiennych środowiskowych mam w tej chwili tak ustawione klasy, (według zaleceń które udało mi się na różnych forach i jutubach wyszukać):

W zmiennych użytkownika - zmienna PATH, wartość - C:\Program Files\Java\jdk1.8.0_121\bin;

W zmiennych systemowych

  • zmienna CLASSPATH, wartość - C:\Program Files\Java\jdk1.8.0_121\lib
  • zmienna Path, wartość - C:\Program Files\Java\jdk1.8.0_121\bin

(tomms) #10

uruchamiaj bez przyrostka ‘.class’ czyli java Main


(paranoise) #11

Źle napisałem tutaj w temacie. Tak czy inaczej niezależnie czy robię, z przyrostkiem “class” czy bez, i tak nie działa i wyświetla się ten sam komunikat - could not find or load main class Main Class.


(kostek135) #12

Jak już masz ten plik Main.class i nie ma on package-u w kodzie źródłowym, na podstawie którego został wygenerowany, to przejdź do folderu który go zawiera i uruchom go tak:

java -cp . Main

PS
A w ogóle to zainwestuj w jakieś darmowe IDE, albo gradle/maven.


(paranoise) #13

Jeśli dobrze mniemam to ten cały package ma być w folderze bin w jdk1.8.0_121 to jest tam gdzie jest plik java.exe. Więc robię tak w cmd: cd C:\Program Files\Java\jdk1.8.0_121\bin. Jestem w folderze i daję te całe java -cp . Main i wyświetla mi się komunikat: could not find or load main class Main.

A co do IDE, to mam Eclipse, ale sporo osób radzi, żeby zaczynać jednak od pisania w notatniku.


(kostek135) #14

Nie. To polecenie masz wywołać w folderze w którym masz plik Main.class. java.exe zostanie odnalezione przez zmienne środowiskowe. Jak wywołasz to w katalogu Java, to skąd on ma wiedzieć o który Main chodzi?

PS
Sporo osób, czyli kto - konkrety, jakiś Java autorytet? Ja radzę zaczynać od IDE czyli mamy póki co 1:0 w kontekście wyimaginowanych innych osób.


(paranoise) #15

Nie do końca wyimaginowanych. Dajmy na to w ćwiczeniach Heliona, a wydaje mi się, że i w innych paru wprowadzeniach do Javy, które przeglądałem, ale dobra, faktycznie zdania mogą tu być podzielone.

Co do java -cp . Dzięki bardzo, działa.