2 programy polaczone

0

Witam, czy w javie za pomoca programu mozemy uruchomic inny program napisany w javie? Chodzi mi konkretnie o cos w stylu aktualizatora, ktory bedzie pobieral z internetu plik, ktory uaktualni program drugi, uruchomi go i sie wylaczy(oczywiscie tylko aktualizator). Wiem, ze mozna to zrobic za pomoca jednego programu, ale na takim rozwiazaniu mi nie zalezy. A i jeszcze jedno za pomoca javy nie da sie usuwac plikow z komputera uzytkownika np jakies obrazki, ktore przestaly byc potrzebne w programie?

0

odpalasz program główny, przy odpaleniu sprawdzasz czy wersja jest aktualna, jeśli nie odpalasz aktualizator i zamykasz program główny:

Runtime.getRuntime().exec("aktualizator.exe");
System.exit(0);

aktualizator pobiera pliki i odpalasz nowy plik exe, który jest za razem programem głównym:
Runtime.getRuntime().exec("programglowny.exe");
a następnie zamyka się aktualizator:
System.exit(0);

PS nie znam javy, komendy zerżnięte na żywca z neta, mogą być złe

0

Niedawno był już bardzo podobny temat. Najpierw zawsze łap wyszukiwarkę.

Generalnie zasada jest taka, że ściągasz plik np. Aktualizator.class lub Aktualizator.jar aktualizatora do katalogAktualizatora lokalnego systemu plików, a następnie odpalasz za pomocą lokalnego wywołania systemowego (jakiś exec itp.)
"java -classpath katalogAktualizatora Aktualizator.class" (mogą być również wszystkie inne opcje takie jak -xmx -xms)
"java -jar katalogAktualizatora/Aktualizator.jar" (opcje j.w.)
Po odpaleniu i sprawdzeniu, że aktualizator się naprawdę odpalił (nie czekasz na jego zakończenie) wychodzisz z właściwego programu (np. System.exit(0) i od tego momentu aktualizator powinien się dowiedzieć, że może modyfikować pliki programu, który właśnie się zakończył. W tym celu powinien sobie jakoś sprawdzać czy program właściwy poszedł spać (jakieś odpytanie JVM lub systemu).

Następnie aktualizator modyfikuje pliki programu właściwego i na koniec swojej pracy wywołuje program właściwy dokładnie tak samo jak opisałem powyżej z wywołaniem aktualizatora.

Minusem tego rozwiązania jest założenie iż "java" znajduje się w katalogu przeszukiwanym przez lokalny system. Jeżeli tak nie jest, to sposób z poprzedniego posta jest bezpieczniejszy.
Wydaje się on nawet bardziej elegancki - ale w niektórych wypadkach pliki .class mogą być jeszcze zblokowane przez JVM i aktualizator nie będzie mógł wtedy ich modyfikować bez wprowadzania opóźnień i odpytywania się JVM. Wywołanie systemowe przez exec("java ...") byłoby o tyle bezpieczniejsze, że aktualizator będzie uruchamiany przez zupełnie odseparowany JVM i modyfikacje programu głównego, które mogły wpłynąć na pierwszą JVM nie będą szkodzić.

0

Dzieki za pomoc, ale zostalo jeszcze jedno pytanie: czy za pomoca javy mozna usuwac niepotrzebne pliki np. .png?
I przy okazji zapytam sie czy za pomoca aktualizacji mozna dodatkowo pobrac obrazki czy tylko rozszerzenia kodu?

0

dokumentacja twoim przyjacielem!
http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html

  • Możesz otwierać/ściagać dowolne pliki
  • Możesz kasować dowolne pliki (do których masz uprawnienia) -> patrz metoda delete()

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