Java w MacOs nie działa

0

Wiadomo, że ideą Javy jest możliwość uruchamiania tego samego programu w kazdym systemie operacyjnym.

Posiadam MacOS 10.5.8.

Ja pisze program w NetBeans dla Windows.

Doszukałem się, że żeby mieć Javę w MacOS, trzeba doinstalwoać te dwie rzeczy:
http://support.apple.com/kb/DL924?viewlocale=pl_PL
http://support.apple.com/kb/DL971?viewlocale=pl_PL
Zrobiłem to, zrestartowałem MacOsa, ale nie zadziałało. Jak wprowadzę plik JAR z programem, to nie da się uruchomic, przy próbie odpalenia, na pasku zadań pojawia się ikona programu i po kilku sekundach znika, nic się nie dzieje. Próbowałem również uruchomić basha i "java -jar plik.jar", też się nie dało.

Zainstalowałem NetBeans, ale nie ruszył pokazując komunikat "Cannot run on older version of Java than Java 6 SE. Please install Java 6 SE or never or use --jdkhome switch to point to its installation directory". Nie udało mi się zmusić NetBeansa do uruchomienia.

Szukając w google, gdzie wymienione aktualizacje wrzucają swoje biblioteki oj Javy, znalazłem coś takiego: http://blog.adsdevshop.com/2008/02/26/installing-the-jdk-16-on-mac-os-x/

Po przywróceniu stanu przed instalacją uaktualnień, postąpiłem według linku. Java się zainstalowała, odpowiednio dodałem katalog do PATH i niby działa.

Pliki Jar nie odpalają się i tak, NetBeans też nie, ale po otwarciu paczki NetBeans, jak się odpali plik binarny zawarty wewnątrz, to program ruszył. Po uruchomieniu NB, wczytałem cały projekt, projekt się skompilował i uruchomił bez problemu.

Ale to nie koniec problemów.

Mój kolega posiada prawdziwy MacBook z MacOS 10.6.x (nie wiem dokładnie, która wersja), nie posiada NetBeans.

Wysłałem mu plik Jar skompilowany pod Windowsem, od razu u niego ruszył bez żadnych komplikacji. Jednak, przy głębszej analizie działania programu (program operuje na bitmapach) nie działają niektóre funkcje przetwarzania bitmap. U mnie były te same problemy z działaniem. Pod Windows, tych problemów nie ma. W miejscach, gdzie w Windows nie ma błędu, pod macOS jest wyjątek i cięzko znaleźć, co powoduje ten wyjątek.

Pytałem się kolegi, jak zainstalował Javę, ten odpowiedział, że odkąd ma ten laptop, to Java już była.

Ja uważam, że gdyby Sun olał fakt, że Apple opracowuje własną wersję javy i Sun normalnie opracował swoją wersję Javy dla macOs, jak dla Windows i Linux i udostępniał tutaj: http://www.java.com/pl/download/manual.jsp to by nie było żadnych problemów z działaniem, bo oba systemy miałyby Javę od tego samego autora.

Skąd ściągnąć sprawdzoną i jak prawidłowo zainstalować Javę na MacOs, bo chyba tu leży przyczyna moich problemów?

0

Najnowsza wersja srodowiska Java sciaga sie automatycznie z poziomu "Software Update..." w Mac OS X i, zakladajac, ze system jest aktualizowany regularnie, nie powinno byc potrzeby instalowania niczego wiecej.

Jesli chodzi o wersje 1.6.0. Mozna posluzyc sie wspomnianym SoyLatte (port z Unix'a), ale zeby nie przekombinowac, najpierw zajrzyj do katalogu /System/Library/Frameworks/JavaVM.framework/Versions. Powinny tam byc rozne wersje JavaVM, wlacznie z wersja 6.0 (1.6.0_20).

Sa tam tez dwa symboliczne linki:

Current    -> /System/Library/Frameworks/JavaVM.framework/Versions/A
CurrentJDK -> /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0

Zeby wlaczyc sobie 6-tke JVM, musisz przekierowac te linki na odpowiednie katalogi:

bash-3.2# sudo ln -hfs 1.6.0 Current
bash-3.2# sudo ln -hfs 1.6.0 CurrentJDK

Po tym zabiegu mozesz sprawdzic, czy wszystko dziala:

java -version

Co do samej aplikacji, to bez konkretnego kodu i stack trace'a bedzie ciezko cos wydedukowac. Bycmoze korzystasz z jakis niestandardowych frameworkow, ktore bazuja na natywnych bibliotekach. Rownie dobrze moze byc problem ze sciezkami do zasobow, albo konfiguracja JVM.

0

Mnie interesuje tylko i wyłącznie ustawienie Javy w warunkach braku bezpośredniego dostępu do internetu, czyli aktualizacje "Software Update" odpadają.

Ustawiłem jeszcze jedną maszynę 10.5.8 i w niej zainstalowałem:

Najpierw to:
http://support.apple.com/kb/DL924?viewlocale=pl_PL

Potem to (nie da się zainstalować bez zainstalowania powyższego linku):
http://support.apple.com/kb/DL971?viewlocale=pl_PL

Potem otwieram terminal i chcę wykonać te dwa polecenia:

sudo ln -hfs 1.6.0 Current
sudo ln -hfs 1.6.0 CurrentJDK

Nic z tego. Nie da się też usunąć tych plików. Nie pojawia się jednak komunikat błędu.

Natomiast, jak cały terminal uruchomię jako superuser, czyli zaraz po wywołaniu dam "sudo bash" to przy próbie usunięcia pliku lub zmiany dowiązania pojawia się błąd "permission denied".

A jak w Finderze chce skasować plik, to pojawia się pytanie o hasło, zatwierdzam (ja mam bez hasła) i plik się usuwa.
Mogę też wykonac kopię pliku w tym samym folderze. Natomiast w Finderze nie moge wykonać dowiązania (polecenie "make alias" jest nieaktywne). podobnie, nie mogę zmienic nazwy skopiowanego pliku. Jednak mozna wynieść plik z katalogu Versions na pulpit, zmienić nazwę i wnieść z powrotem do katalogu Versions.

Po tej sztuczce, niepoprawnej, ale skutecznej, jak dam "java -version" to pokazuje sie, że mam 1.6.0_20

Netbeans nie chce się uruchomić. Pokazuje się ikona na pasku zadań i zawiesza się.

Co z tym fantem zrobić?

0

Wyczaiłem, że te problemy to przekroczenie wielkości pamięci "heap". Program ma właściwie załadować kilka, góra kilkanacie bitmap naraz o wymiarach 2048x1536, więc nie powinno być problemu, a cała pamięć RAM to1GB.

Szukałem, jak zwiększyć heap i znalazłem:
http://loki-render.berlios.de/index.php/forum/9-troubleshooting/141-javalangoutofmemoryerror-java-heap-space
http://forums.techarena.in/software-development/1306406.htm

Ale to chyba dotyczy jednorazowego uruchomienia programu.

Jak permanentnie zwiększyć pamięć heap, żeby w całym netBeans i w uruchamianych z niego programach obowiązywał zwiększona pamięć heap?

0
  1. Napisać sobie skrypt uruchamiający NB z wyższymi wartościami.
  2. Pogrzebać w pliku konfiguracyjnym NB. Jest w głównym katalogu bodajże.
0
Koziołek napisał(a)
  1. Napisać sobie skrypt uruchamiający NB z wyższymi wartościami.
  2. Pogrzebać w pliku konfiguracyjnym NB. Jest w głównym katalogu bodajże.

W podkatalogu /etc jest plik konfiguracyjny. Obojętnie, jakie wartości tam wpiszę, jak uruchomię netbeans, i odpalę poniższy program, to zawsze pokazuje, że cała pamięć to ok. 7MB.

public class  HeapSize 
{
public static void main(String[]args)
{
long Size = Runtime.getRuntime().totalMemory();
System.out.println("Heap Size = " + Size);
}
}
0

Jeszcze musisz ustawić pamięć we właściwościach projektu.

0

@op

Troche sie nie zrozumielismy. Po kolei:

andrzejlisek napisał(a)

Mnie interesuje tylko i wyłącznie ustawienie Javy w warunkach braku bezpośredniego dostępu do internetu, czyli aktualizacje "Software Update" odpadają.

Apple udostepnil JavaVM 1.6.0 razem z pierwszym update'm do Leoparda, wiec jesli masz OS X'a aktualniejszego niz 10.5.1, to automatycznie powinienes miec 6-tke Javy. "Software Update" jest potrzebny tylko po to, zeby sciagnac sobie kolejne aktualizacje Javy (najnowszy: 1.6.0_20).

Dalej: zeby skutecznie podmienic linki Current i CurrentJDK powinienes otworzyc terminal i wpisac takie komendy:

Mac:~ ws$ cd /System/Library/Frameworks/JavaVM.framework/Versions
Mac:Versions ws$ sudo -s
Password:
bash-3.2# sudo ln -hfs 1.6.0 Current
bash-3.2# sudo ln -hfs 1.6.0 CurrentJDK

Ale zapomnij o tym. Dla mnie to dzialalo w kilku przypadkach, ale z paru powodow na dluzsza mete ten sposob sie nie sprawdzi. W zamian za to, przejdz do /Applications/Utilities/Java Preferences i w Generals -> Java Applications przeciagnij Java SE 6 na sama gore listy. W ten sposob ustawisz JavaVM 6 jako domyslne srodowisko dla wszystkich aplikacji Java.

andrzejlisek napisał(a)

W podkatalogu /etc jest plik konfiguracyjny. Obojętnie, jakie wartości tam wpiszę, jak uruchomię netbeans, i odpalę poniższy program, to zawsze pokazuje, że cała pamięć to ok. 7MB.

Modyfikacja netbeans_default_options w netbeans.conf ma wplyw wylacznie na prace samego IDE a nie aplikacji w nim pisanych/uruchamianych. Jesli chcesz uruchomic Swoj program z innym niz domyslny przydzialem pamieci, musisz to podac jako parametry java, np.:

Mac:~ ws$ java -Xmx64M HeapSize
Nie mozesz natomiast nadpisac globalnie domyslnych wartosci JVM, ktore, BTW, roznia sie w zaleznosci od dystrybucji/wersji.</b>

0

Zainstalowałem te 2 updaty i w preferencjach Javy ustawiłem javę 6 na pierwszym miejscu.

We właściwościach projektu w Windows ustawiłem Heap size na wartość 128m i maximum na 256m. Program z Netbeansa działa bez żadnych problemów.

Ale jest jeszcze sprawa taka, że jak uruchomię JARa skompilowanego w Windows, to pliki długo się wczytują i po przejrzeniu kilku zdjęć (jest to program do generowania i przeglądania anaglifów) się zawiesza, sa problemy z działaniem. Natomiast, jak uruchomię Netbeans w MacOs i otworzę identyczny projekt, zrobię build i zamknę Netbeans, to wtedy ten sam plik JAR działa normalnie, zdjęcia szybciej się wczytują i nie ma problemów z działaniem programu. Kompilacja dokładnie tego samego projektu, ale to, w jakim systemie kompilowano, jakby miało znaczenie, co jest sprzeczne z ideą Javy.

Jeszcze jest taka sprawa, że mój projekt jest sterowany klawiaturą i wykorzystuje między innymi klawisz Insert. Nie jest to problem tego projektu, bo można zdefiniować tą funkcję pod inny klawisz, ale chodzi mi o to, że jak wciskam klawisz insert, to program nie reaguje na klawisz, a kursor myszki zamienia się w znak zapytania i jak się gdzieś nim kliknie, to nic się nie dzieje i kursor wraca do strzałki. Klawisz Insert zachowuje się tak w kazdym programie niezależnie od Netbeans i Javy, również np. w edytorze plików tekstowych będącym na wyposażeniu MacOS. Co trzeba zrobić, żeby klawisz Insert działał, jak każdy inny?

0

Co do pierwszego pytania: przypuszczalnie chodzi o to, ze 6-ka Javy pod MacOS X 10.5+ jest 64-bitowa (dlatego w systemie domyslnie ustawiana jest JavaSE 5 32-bit). Sprobuj zbudowac ten projekt w NetBeans pod Windows, ale jako "Source/Binary Format" ustaw JDK 5.0 i wtedy uruchom go spod JavaSE 5 na mac'u. Alternatywnie, dodaj do wywolania programu przelacznik -d32, co zasugeruje uruchomienie aplikacji w 32-bitowej JVM.

Pytanie drugie: mac'i nie maja bloku klawiszy sterujacych (PgUp, PgDn, Delete, Insert, Home, End), a domyslnym zachowaniem klawisza Insert jest wyswietlanie pomocy. NTG.

0
ws napisał(a)

Co do pierwszego pytania: przypuszczalnie chodzi o to, ze 6-ka Javy pod MacOS X 10.5+ jest 64-bitowa (dlatego w systemie domyslnie ustawiana jest JavaSE 5 32-bit). Sprobuj zbudowac ten projekt w NetBeans pod Windows, ale jako "Source/Binary Format" ustaw JDK 5.0 i wtedy uruchom go spod JavaSE 5 na mac'u. Alternatywnie, dodaj do wywolania programu przelacznik -d32, co zasugeruje uruchomienie aplikacji w 32-bitowej JVM.

Ja miałem tak cały czas, nic nie zmieniałem:
user image

Tak ustawiłem Javę w macOS:
user image

Przy próbie odpalenia programu pojawia się taki tekst:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/swing/GroupLayout$Group
	at anaglyphviewer.AnaglyphViewerApp.startup(AnaglyphViewerApp.java:19)
	at org.jdesktop.application.Application$1.run(Application.java:171)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Jest gorzej niż było. Gdzie szukać przyczyny?

ws napisał(a)

Pytanie drugie: mac'i nie maja bloku klawiszy sterujacych (PgUp, PgDn, Delete, Insert, Home, End), a domyslnym zachowaniem klawisza Insert jest wyswietlanie pomocy. NTG.

W takim razie, to jaki klawisz zmienia tryb wstawiania i zastępowania w edytorach tekstów?

0
andrzejlisek napisał(a)

Przy próbie odpalenia programu pojawia się taki tekst:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/swing/GroupLayout$Group
at anaglyphviewer.AnaglyphViewerApp.startup(AnaglyphViewerApp.java:19)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

> 
> Jest gorzej niż było. Gdzie szukać przyczyny?


W dokumentacji jezyka. Korzystasz z <i>javax.swing.GroupLayout</i>, ktorego nie ma w wersji wczesniejszej niz Java SE 6.

Na moje oko, masz takie mozliwosci:
1. udostepnic dwie wersje aplikacji: dla 64-bitowej JVM (Mac OS X) i 32-bitowej JVM (Linux, Solaris, Windows).
2. przerobic aplikacje na zgodna z Java SE 5, skompilowac pod 32-bitowa JVM i uruchamiac na dowolnej platformie
3. wymuszac na uzytkowikach OS X'a instalacji JVM, typu SoyLatte/OpenJDK (glupi pomysl)



 > ##### andrzejlisek napisał(a)
> > ##### ws napisał(a)
> > Pytanie drugie: mac'i nie maja bloku klawiszy sterujacych (PgUp, PgDn, Delete, Insert, Home, End), a domyslnym zachowaniem klawisza Insert jest wyswietlanie pomocy. NTG.
> 
> W takim razie, to jaki klawisz zmienia tryb wstawiania i zastępowania w edytorach tekstów?


Nie ma takiego klawisza. Sa opcje w menu, albo skroty. NTG.
0

Jeżeli aplikacja ma być kompatybilna z Javą 5, to użyj swing-layout: https://swing-layout.dev.java.net/servlets/ProjectDocumentList i przestaw Netbeans, aby używał org.jdesktop.layout.GroupLayout: http://wiki.netbeans.org/FaqFormLayoutGenerationStyle

0

Ustawiłem JDK 6 we właściwościach projektu, odpaliłem na MacOs z zainstalowanymi aktualizacjami, bez "obcych" JVM typu Soylatte i działa bez żadnych problemów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1