Chciałbym zrobić prosty program w Javie. Podstawy Javy już znam. Jednak nie wiem jak odpalić pliki JAR poza konsolą. Znaczy mam program do przerabiania plików JAR na EXE, ale to się mija z celem. Jeżeli on program w Javie konsolowy ważący 2,5kB przerabia na plik EXE ważący 450kB to jest coś nie tak. Chciałbym takie rozwiązanie jakie zostało zastosowane przy programie muCommander. Tam plik EXE waży 2,5kB a plik JAR 2,5MB. Dodam jeszcze, że korzystam ze środowiska NetBeans 6.5 oraz programu do tworzenia plików EXE jSmooth. Z góry dzięki za pomoc.
Pliki .jar poza konsola uruchamiasz tak jak kazdy inny program .exe - drukrotne klikniecie. wiec nie ma potrzeby przerabiac go dodatkowo na .exe.
Plik .jar w NB utworzysz np. klikajac PPM w SolutionExplorer na swoim projekcie, nastepnie “Build Project”. W katalogu projektu utworzy sie folder dist, w nim plik .jar gotowy do uruchomienia.
To powiedz dlaczego prosty program przepisany z książki nie chce mi się odpalić po podwójnym kliknięciu?
Spróbuj przemianować plik JAR na np GAR i uruchomić exe :lol:
Exe jest raczej napisany w C/C++ lub Assemblerze i jedyne co robi to każe systemowi uruchomić plik JAR.
Najpierw trzeba skompilować (tak zwana prekompilacja) do postaci JAR a potem dopiero podwójny klik. O ile nie ustawiłeś (ty lub jakiś program) w systemie inne domyślne działanie dla plików JAR, np. na moim komputerze domyślnym dla JAR jest otwarcie go w WinZip’ie.
No właśnie mam domyślnie wszystko jeżeli chodzi o odpalanie programów JAR. Wybrałem nawet, Otwórz za pomocą: X:\Program Files\Java\jre6\bin\java.exe
Exe to plik wykonywalny i nie ma znaczenia w czym jest napisany(no dobra, exe jest napisany w kodzie maszynowym). C/C++ i asembler to nie jedyne języki Pascal, Delphi, C#, VB.NET, VB, Blitz Basic, GM(język skryptowy GML) to też języki(oczywiście to tylko część, nie wszystkie
)
Fiołek zadziwiasz mnie, wyrywasz kawałki odpowiedzi z kontekstu, to bez sensu.
Tłumaczyłem zadziwiająco małą objętość pliku exe muCommander’a.
Nie wyrwałem z kontekstu, zanegowałem po prostu to, że plik exe jest napisany w “C/C++ lub asemblerze”, on równie może być napisany w C#/Delphi/Pascalu jak i w C++
To było zwykłe czepialstwo
Co to za “zadziwiająca objętość”? Jeśli ten program jest napisany w Javie, to exec wywołuje tylko ShellExecute uruchamiający jara z programem “exe-kiem” Javay. Czyli robi coś takiego(przełożenie na linie poleceń): “java.exe -jar program.jar”. Więc nie ma możliwości by ten jeden skok zajmował więcej niż kilka bajtów(reszta to nagłówek EXE-ka).
Razem będzie zajmować sporo
@up: 7kB uzyskałem kompilując w Release VC++ z nastawieniem na mały kod. Do tego spakowane UPX z opcją -9 i dostajemy 5kB. Przypuszczam, że jeszcze bardziej można zoptymalizować(usuwając zasoby z pliku, etc.).
EDIT: 2.5kB uzyskałem stosując się do TEGO opisu. Tylko nie kompresowałem Crinklerem. Na upartego uzyskał by COM-a 256B. Ogólnie polecam lekturę “myków” stosowanych przy tworzeniu inter 4k/256B
Własne o tym mówiłem, tak małą objętość pliku exe da się uzyskać w C/C++ lub Assemblerze, w innych językach to mało prawdopodobne ale nie wykluczam takiej możliwości, stad moje określenie … jest raczej napisany w ….
Za pomocą wymienionych przez siebie języków: Pascal, Delphi, C#, VB.NET, VB, Blitz Basic raczej nie da się zrobić tak małego exe.
To jak mam w końcu to zrobić. W muCommander plik exe jest maluteńki a JAR duży czyli tak jak powinno być. Zastanawia mnie jak to zrobić? W jaki sposób mam swoją aplikację w Javie zrobić by była odpalana z exe. Zapomniałem dodać, że jak włączę plik JAR od muCommaneder tak ręcznie nie przez exe to działa. Każda moja aplikacja w Javie napisana w NetBeans już nie. Dlaczego?
Chciałbym zauważyć, że język to tylko narzędzie. W każdym da się zrobić wszystko i to tylko od nas zależy czego użyjemy. Zresztą, co za problem sobie “skonwertować” EXE “pascalowego” na COM-a?
Napisałeś takie zdanie, jakbyś mówił, że EXE-ka(jako takiego, nie tego w tej aplikacji, chociaż tam jest to “normalny” EXE-k - ~55kB, sprawdzałem) nie da się “raczej” napisać w innym języku niż C/C++ lub asembler.
Z mojej strony EOT.
Oto kod tego programu. Proszę go ewentualnie poprawić. Dodam jeszcze, że odpalałem (próbowałem) na świeżo postawionym XP z maszyną Javy i tak samo brak okna ale jak z wiersza poleceń się każe to działa.
package liczenie;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Pierwsza liczba:");
double c = in.nextDouble();
System.out.println("Druga liczba");
double d = in.nextDouble();
liczenie p = new liczenie(c, d);
System.out.println(p.mnozenie());
}
}
class liczenie{
public liczenie(double a, double b){
this.a = a;
this.b = b;
}
public double mnozenie(){
wynik = a * b;
return wynik;
}
private double a;
private double b;
private double wynik;
}
Mogę spytać, jaki jest sens tworzenia klasy, która umożliwia jedynie pomnożenie dwóch liczb? ;>
Bo nawet jeśli to miałby być tylko abstrakcyjny przykład w celu nauczenia się tworzenia obiektów, to można było wymyślić coś ciekawszego
Napisałem coś banalnego, żeby sprawdzić tylko czy da się odpalić plik JAR “normalnie”, a nie z linii komend. Próbuje to teraz rozwiązać.
Wywal klasę liczenie oraz to:
liczenie p = new liczenie(c, d);
System.out.println(p.mnozenie());
zamień na:
System.out.println(c*d);
Nadal będzie coś banalnego.
Dobrze. Dzięki, że odkryłeś koło. Widzę, że koncentrujemy się na złym temacie. Chciałbym się dowiedzieć, czy brakuje czegoś w tym kodzie, że nie chce mi się to otworzyć poza linią poleceń.
Nie w kodzie brakuje, zaś w ustawieniach windows, pisałem już o tym wcześniej w tym temacie.
Ale problem jest taki, że nie działa nawet na świeżym WIndowsie.