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.
Annonceindlæg fra Pointsharp
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...
25. oktober 2007 - 19:18
#2
Og i java er det selvfølgelig: Runtime.exec("/ext/program.exe"); :)
25. oktober 2007 - 19:21
#3
Runtime.getRuntime().exec("/ext/program.exe");
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...
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...
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; } }
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...
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; }
25. oktober 2007 - 20:07
#9
Ja, du skal pakke det ind i en jar-fil. Ellers har det ingen effekt.
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
26. oktober 2007 - 07:59
#11
Kommer her...
Kurser inden for grundlæggende programmering