Pliki exe i Java

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 :wink: Pascal, Delphi, C#, VB.NET, VB, Blitz Basic, GM(język skryptowy GML) to też języki(oczywiście to tylko część, nie wszystkie :wink: )

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++ :wink:

To było zwykłe czepialstwo :wink:

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 :stuck_out_tongue:

@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 :wink:

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 :slight_smile:

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.