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.
Как запустить exe вайл из своей программы вобщем нужно что бы при нажатии на кнопку открывалась программа не знаю как правильно прописать это.
как запустить exe-шник программы C# .net 2.0 с сетевого диска? Подскажите, пожалуйста, как запускать программу, написанную на C# .net 2.0, c сетевого диска.
Есть один листинг программы который нужно запустить и скомпилировать!(код не мой). Вообщем скачал с inet листинг программы на Delphi и как вы уже догадались не смог с ним.
File file=newFile("путь к файлу в формате C:\\some folder\\file.exe"); Desktop.getDesktop().open(file);
Desktop.getDesktop().open("путь к файлу в формате C:\\some folder\\file.exe");
Vortal, 1 не работает, а 2 вообще ругаеться
Добавлено через 7 минут Работает только с расширением .lnk
скажите уже наконец что именно вы хотите запустить для запуска Ява классов вовсе не обязательно стартовать новую JVM (хотя и это возможно)
есть 2 пути, загрузить класс в системный класс лоадер или в новый свой и там уже выполнить запуск через рефлекшен
Сообщение от mutagen
Задумка у меня такая. Программа стучится на веб сервер и читает файл. Сверяет его с локальным файлом. Если версия файла на веб сервере новее чем локальный то необходимо выключить себя и запустить вторую программу которая удалит первую и загрузит обновленную и по окончанию загрузки запустит ее и закроет себя. Так сказать самообновление продукта. Поэтому встал вопрос как запустить вторую программу(которая удалит первую и скачает новую). С батником как видно не получилось(батник запускал другой класс-файл), запускать вторую JVM не рационально, тогда вполне подходит
Сообщение от mutagen
В таком случае у вас больше проблем чем кажется. Даже если обойти проблему ланчером, который по патерну команда будет просто скачивать и запускать на выполнение свежую версию, JVM будет матюкаться на попытку загрузить новый класс если класс с таким именем уже есть в статик контексте. Повлиять както на то чтобы JVM выгрузила класс пользователь не может, поэтому придётся грузить его новым инстансом класслоадера.
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.
//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.
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 файл будет выглядеть следующим образом после его написания программой.