Avatar billede scorp-d Nybegynder
25. oktober 2007 - 18:55 Der er 10 kommentarer og
1 løsning

Opstart af extern program inde i Jar-filen

Hej..

jeg har lavet et program som tjekker hvilket styresystem der er i brug, og hvis det er windows så skal den starte et program.exe som jeg har compiled ind i jar-filen i Eclipse.

er dettte muligt ?


Har prøvet lidt forskelligt men det har ikke virker.


På forhånd tak.
Avatar billede mikkelbm Nybegynder
25. oktober 2007 - 19:13 #1
Hvis filen er placeret i:

/ext/program.exe

inde i jarfilen, burde du kunne:

Process.start("/ext/program.exe");

- Det er dog ikke testet...
Avatar billede mikkelbm Nybegynder
25. oktober 2007 - 19:18 #2
Og i java er det selvfølgelig:

Runtime.exec("/ext/program.exe");

:)
Avatar billede mikkelbm Nybegynder
25. oktober 2007 - 19:21 #3
Runtime.getRuntime().exec("/ext/program.exe");
Avatar billede scorp-d Nybegynder
25. oktober 2007 - 19:40 #4
jeg har prøvet følgende:

Runtime rt = Runtime.getRuntime();
Process prcs = rt.exec("/apps/PROGRAM.EXE");

og så lagt PROGRAM.EXE i en mappe som hedder apps i eclipse projektet....Men den fejler stadig...

Hvis jeg fjerner /apps og lægger filen PROGRAM.EXE ved siden af jar filen virker det udemærket...
Avatar billede mikkelbm Nybegynder
25. oktober 2007 - 19:42 #5
Ja, jeg har lige leget lidt med det. Og det er vist ikke så let som jeg troede. Jeg prøver lige at lave et lille eksempel...
Avatar billede mikkelbm Nybegynder
25. oktober 2007 - 19:44 #6
Så tror jeg det lykkedes:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.JOptionPane;

public class Main
{
    public static void main(String[] arsg)
    {
        try
        {
            extractFileToDisk("ext/", "calc.exe");
            Runtime.getRuntime().exec("ext/calc.exe");
        } catch (Exception e)
        {
            JOptionPane.showMessageDialog(null, e.toString());
            e.printStackTrace();
        }
    }
   
    private static boolean extractFileToDisk(String path, String fileName)
    {
        try
        {
            InputStream in = Main.class.getClassLoader().getResourceAsStream(path + fileName);
            File f = new File(path);
            f.mkdirs();
            FileOutputStream out = new FileOutputStream(path + fileName);
           
            byte[] buffer = new byte[8192];
            int read = 0;
           
            while ((read = in.read(buffer)) > 0)
                out.write(buffer, 0, read);
           
            out.flush();
            out.close();
            in.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
            return false;
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return false;
        }
       
        return true;
    }
}
Avatar billede mikkelbm Nybegynder
25. oktober 2007 - 19:45 #7
Ovenstående eksempel pakker simpelthen filen ud på disken og kører det derfra.

Struktur i jar-filen:

/ext/calc.exe
/META-INF/
etc...
Avatar billede scorp-d Nybegynder
25. oktober 2007 - 20:03 #8
Jeg når jeg prøver at afvikle følgende, sletter den calc.exe og opretter en ny tom udgave. Er det fordi jeg afvikler den i eclipse ?:

public Licens()
    {
       
        try
        {
            extractFileToDisk("ext/", "calc.exe");
            Runtime.getRuntime().exec("ext/calc.exe");
        } catch (Exception e)
        {
            JOptionPane.showMessageDialog(null, e.toString());
            e.printStackTrace();
        }


    }

private boolean extractFileToDisk(String path, String fileName)
    {
        try
        {
            InputStream in = Licens.class.getClassLoader().getResourceAsStream(path + fileName);
            File f = new File(path);
            f.mkdirs();
            FileOutputStream out = new FileOutputStream(path + fileName);
           
            byte[] buffer = new byte[8192];
            int read = 0;
           
            while ((read = in.read(buffer)) > 0)
                out.write(buffer, 0, read);
           
            out.flush();
            out.close();
            in.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
            return false;
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return false;
        }
       
        return true;
    }
Avatar billede mikkelbm Nybegynder
25. oktober 2007 - 20:07 #9
Ja, du skal pakke det ind i en jar-fil. Ellers har det ingen effekt.
Avatar billede scorp-d Nybegynder
25. oktober 2007 - 21:09 #10
Så kom det til at virke.. tak for det... hvis du vil have pointene kan du bare lave et svar
Avatar billede mikkelbm Nybegynder
26. oktober 2007 - 07:59 #11
Kommer her...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester