Load exe in java

Create Windows Executable (.exe) for Java Application

Launch4j is a cross-platform tool for wrapping Java applications distributed as jars in lightweight Windows native executable files. In this post, we will learn making such an executable file for a demo java application.

Step1 ) Create a java application

I am creating a very basic java class which simply displays a frame and some text on it. It also has the main() method which will start the application.

package com.howtodoinjava; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Label; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JDialog; public class ApplicationMain extends JDialog < private static final long serialVersionUID = 1L; public ApplicationMain() < //Create a frame Frame f = new Frame(); f.setSize(500, 300); //Prepare font Font font = new Font( "SansSerif", Font.PLAIN, 22 ); //Write something Label label = new Label("Launch4j Maven Demo with HowToDoInJava.com"); label.setForeground(Color.RED); label.setFont(font); f.add(label); //Make visible f.setVisible(true); f.addWindowListener(new WindowAdapter() < public void windowClosing(WindowEvent e) < System.exit(0); >>); > public static void main(final String[] args) < new ApplicationMain(); >>

Step 2) Create maven file with launch4j configured in it

I have created a pom file for packaging the application as .exe file. If you feel something unclear, drop a comment.

 4.0.0 com.howtodoinjava JavaExeDemo jar 1.0-SNAPSHOT JavaExeDemo http://maven.apache.org UTF-8    org.apache.maven.plugins maven-compiler-plugin 2.5.1 1.6 1.6   org.apache.maven.plugins maven-shade-plugin 1.7.1  package shade    true shaded  com.howtodoinjava.Main     com.akathist.maven.plugins.launch4j launch4j-maven-plugin 1.5.1  l4j-clui package launch4j  gui $/$-$-shaded.jar $/howtodoinjava.exe http://java.com/download com.howtodoinjava.ApplicationMain anything  application.ico 1.6.0 preferJre  1.0.0.0 $ $ 2012 howtodoinjava.com 1.0.0.0 1.0.0.0 $ howtodoinjava.com howtodoinjava howtodoinjava.exe         

Step 3) Create .exe file

To make the exe file for above java program, run maven command:

Above command will create the “howtodoinjava.exe ” file in your project’s target folder. Double click on .exe file will open the window like this.

Launch4j maven demo to create java executable

If you want to download source code of above application, click on below given download link.

Happy Learning !!

Источник

Как запустить *.exe из кода мой программы?

Как запустить exe вайл из своей программы
вобщем нужно что бы при нажатии на кнопку открывалась программа не знаю как правильно прописать это.

как запустить exe-шник программы C# .net 2.0 с сетевого диска?
Подскажите, пожалуйста, как запускать программу, написанную на C# .net 2.0, c сетевого диска.

Есть один листинг программы который нужно запустить и скомпилировать!(код не мой).
Вообщем скачал с inet листинг программы на Delphi и как вы уже догадались не смог с ним.

File file=new File("путь к файлу в формате C:\\some folder\\file.exe"); Desktop.getDesktop().open(file);
Desktop.getDesktop().open("путь к файлу в формате C:\\some folder\\file.exe");

Vortal, 1 не работает, а 2 вообще ругаеться

Добавлено через 7 минут
Работает только с расширением .lnk

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import java.awt.Desktop; import java.io.File; import java.io.IOException; public class OpenExe { public static void main(String args[]){ File file =new File("C:\\Downloads\\qip8082.exe"); try { Desktop.getDesktop().open(file); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13
import java.awt.Desktop; import java.io.File; import java.io.IOException; public class OpenExe { public static void main(String args[])throws IOException{ File file =new File("C:\\Downloads\\qip8082.exe"); Desktop.getDesktop().open(file); } }
Runtime.getRuntime().exec("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
ProcessBuilder b = new ProcessBuilder("C:\\troyan.exe","-arg1", "-arg2");
ListString> params = java.util.Arrays.asList("C:\\troyan.exe", "-arg1", "-arg2"); ProcessBuilder b = new ProcessBuilder(params);
ProcessBuilder pb = new ProcessBuilder("starter.bat"); pb.start();

Не помогает. Файл видит, но он его не запускает.

Runtime.getRuntime().exec("starter.bat");

ЦитатаСообщение от waip Посмотреть сообщение

в том что bat это не программа а команды шеллу cmd.exe, чтобы его запустить его надо запустить шелл и передать bat как параметр шеллу

А если нужно запустить другой класс файл?

ProcessBuilder pb = new ProcessBuilder("java","-JavaApplication"); pb.start();

скажите уже наконец что именно вы хотите запустить
для запуска Ява классов вовсе не обязательно стартовать новую JVM (хотя и это возможно)

есть 2 пути, загрузить класс в системный класс лоадер или в новый свой и там уже выполнить запуск через рефлекшен

ЦитатаСообщение от mutagen Посмотреть сообщение

Задумка у меня такая.
Программа стучится на веб сервер и читает файл. Сверяет его с локальным файлом. Если версия файла на веб сервере новее чем локальный то необходимо выключить себя и запустить вторую программу которая удалит первую и загрузит обновленную и по окончанию загрузки запустит ее и закроет себя.
Так сказать самообновление продукта.
Поэтому встал вопрос как запустить вторую программу(которая удалит первую и скачает новую).
С батником как видно не получилось(батник запускал другой класс-файл), запускать вторую JVM не рационально, тогда вполне подходит

ЦитатаСообщение от mutagen Посмотреть сообщение

В таком случае у вас больше проблем чем кажется.
Даже если обойти проблему ланчером, который по патерну команда будет просто скачивать и запускать на выполнение свежую версию, JVM будет матюкаться на попытку загрузить новый класс если класс с таким именем уже есть в статик контексте.
Повлиять както на то чтобы JVM выгрузила класс пользователь не может, поэтому придётся грузить его новым инстансом класслоадера.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
package classtricks; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; /** * * @author mutagen */ public class ClassLoadTricks { public static void main(String[] args) throws Exception { CustomLoader cc1 = new CustomLoader(ClassLoadTricks.class.getClassLoader()); File pathToClass = new File("build/classes/classtricks/ClassLoadTricks.class"); Class c1 = cc1.getClassFromFile(pathToClass, "classtricks.ClassLoadTricks"); Method m1 = c1.getMethod("start", String.class); Object o1 = c1.newInstance(); m1.invoke(o1, "1.0"); CustomLoader cc2 = new CustomLoader(ClassLoadTricks.class.getClassLoader()); Class c2 = cc2.getClassFromFile(pathToClass, "classtricks.ClassLoadTricks"); Method m2 = c2.getMethod("start", String.class); Object o2 = c2.newInstance(); m2.invoke(o2, "2.0"); System.out.println("Is it the same class ? " + (o1.getClass() == o2.getClass())); System.out.println("But how about name:"); System.out.println("\t" + o1.getClass().getCanonicalName()); System.out.println("\t" + o2.getClass().getCanonicalName()); } public void start(String version) { System.out.println("Start a new app version: " + version); // do real start } static class CustomLoader extends ClassLoader { public CustomLoader(ClassLoader parent) { super(parent); } public Class getClassFromFile(File f, String name) { byte[] raw = new byte[(int) f.length()]; InputStream in = null; try { in = new FileInputStream(f); in.read(raw); } catch (Exception e) { e.printStackTrace(); } try { if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } return defineClass(name, raw, 0, raw.length); } } }

Источник

It’s all about Java

James Gosling: idealism, the Internet and Java, Pt I

Monday, 26 December 2016

Apache Commons Exec API for executing exe files from java program

In my previous post http://java-gui.blogspot.in/2016/12/api-for-executing-exe-files-from-java.html you have seen using traditional java API to execute exe files from java program.

but it is proved that it is not an ideal solution for programs which handles IO operations and for async executables. you can find more advantages of Apache Commons Exec library over traditional API in the below link.

Simple example that uses the Exec library:

// class to pass the command ex: cmd.exe and its arguments.

CommandLine command = new CommandLine(«ping»);

// arguments to the command object can be passed in 2 ways.

command.addArguments(«localhost») ;
command.addArguments(«-t») ;
command.addArguments(«-count»);

//handling the IO operations gracefully using LogOutputStream abstract class

LogOutputStream in = new LogOutputStream() < @Override
protected void processLine(String line, int exitvalue) < //handle the output which was produced by the process.
System.out.println(line);
>
>;
PumpStreamHandler streamHandler = new PumpStreamHandler(in, in);

// Executing the command along with its arguments

DefaultExecutor executor = new DefaultExecutor();

//attaching the created shreamhandler to the executor.

the above program executes the ping command and displays the output using the standard out.

Executing the interactive executables can be found in the below link.

Источник

Запустите файл .exe в Java из расположения файла

Process process = runtime.exec("c:\\program files\\test\\test.exe"); 

Но я получал некоторую ошибку. Затем я узнал, что exe должен быть запущен из этого местоположения, которое является c://программными файлами/test/только тогда оно будет открыто с ошибками. Поэтому я решил написать .bat файл и выполнить его так, чтобы он подключился к этому месту и выполнил файл .exe. Ниже приведен мой код:

BufferedWriter fileOut; String itsFileLocation = "c:\\program files\\test\\" System.out.println(itsFileLocation); try < fileOut = new BufferedWriter(new FileWriter("C:\\test.bat")); fileOut.write("cd\\"+"\n"); fileOut.write("cd "+ itsFileLocation +"\n"); fileOut.write("test.exe"+"\n"); fileOut.write("exit"+"\n"); fileOut.close(); // Close the output stream after all output is done. >catch (IOException e1) < e1.printStackTrace(); >// Create the Buffered Writer object to write to a file called filename.txt Runtime runtime = Runtime.getRuntime(); try < Process process =runtime.exec("cmd /c start C:\\test.bat"); >catch (IOException e)

Приведенный выше код работает отлично. Однако командная строка также открывается в конце моего .exe(Application). Он закрывается только после выхода EXE файла. Мне нужно выполнить команду командной строки, когда моя статистика приложения. Мой .bat файл будет выглядеть следующим образом после его написания программой.

cd\ cd C:\Program Files\test\ test.exe exit 

Источник

Читайте также:  Bootstrap classes in html
Оцените статью