java实现可安装的exe程序

通过编写Java代码,实现可安装的exe文件的一般思路:

1、在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格式的jar包;

2、通过安装exe4j软件,将导出的.jar格式的文件制作成.exe格式的可执行的文件,(注意:此时的.exe文件只是可以执行,还不能够安装);

3、通过安装Inno setup软件,将可执行的.exe格式的文件、.jar格式的文件以及其它需要的文件制作成一个可安装的.exe格式的文件;

4、非常注意:在exe4j和Inno setup软件中选择的路径都是相对路径,因此在导出的jar包、exe4j、Inno setup等软件执行的过程中,强烈建议一直保持在一个文件夹内进行操作和输出文件;

通过java代码实现可安装的exe格式文件的一般步骤如下:

一、创建java项目,编写好java代码,导出jar包:

1、创建java项目,编写java代码就不用多说了;

2、如果需要可以将程序中的一些信息,写在一个项目(jar包)外部的.ini格式的配置文件中去,比如客户端链接服务端的IP、端口号等信息,以后服务端的IP和端口号修改了,只需要修改配置文件即可,不需要修改java代码了,具体步骤如下:

非常注意:.ini格式的配置文件最好是和项目(jar)包在一个工作目录下

(1)创建.ini格式的配置文件,然后在配置文件中写入信息,以key-value键值对的形式进行书写:

(2)在项目中编写java代码,在项目或程序启动时,首先读取.ini格式的配置文件中的信息,将获取的信息给项目中需要的地方,读取.ini格式文件信息的代码如下:

package com.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties; import com.model.ServerInfo; /**
* 读取连接服务端配置信息的.ini格式文件信息的工具类
* @author admin
*
*/
public class LoadServerInfo { public static ServerInfo LoadIniFile(){
Properties properties = new Properties();
File exeWorkFile = new File("");//获取jar或exe或项目工作目录的路径
String iniPath = exeWorkFile.getAbsolutePath()+File.separator+"serverInfo.ini";//获取.ini格式文件的路径
ServerInfo serverInfo = new ServerInfo();
try {
properties.load(new FileInputStream(iniPath));//读取.ini格式文件中的信息
//通过key获取.ini文件中对应的value值,并将该value值存储到一个对象中去
serverInfo.setIP(properties.getProperty("IP"));
serverInfo.setPortNumber(Integer.valueOf(properties.getProperty("portNumber")));
} catch (IOException e) {
e.printStackTrace();
}finally{
return serverInfo;//将存有.ini格式文件中信息的对象返回
} } public static void main(String[] args) {
ServerInfo serverInfo = LoadServerInfo.LoadIniFile();
System.out.println(serverInfo);
} }

  对应的存储服务端信息的实体类代码如下:

package com.model;
/**
* 连接服务端配置信息实体类
* @author admin
*
*/
public class ServerInfo { private String IP;//服务端IP
private Integer portNumber;//服务端的Socket端口号 public ServerInfo(){ } public ServerInfo(String iP, Integer portNumber) {
super();
IP = iP;
this.portNumber = portNumber;
} public String getIP() {
return IP;
} public void setIP(String iP) {
IP = iP;
} public Integer getPortNumber() {
return portNumber;
} public void setPortNumber(Integer portNumber) {
this.portNumber = portNumber;
} @Override
public String toString() {
return "ServerInfo [IP=" + IP + ", portNumber=" + portNumber + "]";
} }

3、导出jar包:

步骤一:

步骤二:

步骤三:

二、通过安装exe4j软件,将jar包制作成可执行的exe格式文件(注意:此时的exe格式文件只是可以执行,但是不可以安装):

1、下载exe4j软件,然后按照正常的进行安装即可:

2、步骤一:

3、步骤二:

4、步骤三:注意选择路径的时候一定要选择存放有jar包、jre等文件的文件夹所在的路径,这也是输出.exe格式文件的路径,强烈建议这样写;

5、步骤四:填写可执行exe文件名称、选择exe可执行程序的图标、一台计算机上是否只允许有一个该程序启动;

非常注意:ICO格式的文件一定是通过PS输出ICO格式的图片,不能够将其它格式文件强制修改为ICO格式文件,否则会报异常:

java.io.IOException:icon file does not contain icon data

6-1、步骤五-1:设置编码格式为UTF-8,输入内容是:-Dfile.encoding=utf-8

如果不设置编码格式的话,服务端传递给客户端的中文会在客户端中显示会变为乱码;

6-2、步骤五-2:将项目导出的jar包添加进来,非常注意:此时的jar包路径一定要相对路径,因为上述选择输出.exe格式文件的路径就是jar包所在文件夹的路径,即exe4j软件工作空间就是jar包所在的路径,相对路径是相对于工作空间来说的,因为jar包就在工作空间的根目录下,因此只接写jar包的文件名+格式即可;

7、步骤六:选择执行项目时,首先执行的第一个java类,类似于在BS项目中,访问某个项目时设置访问首页一样;

8、步骤七:项目的jar包和项目访问的首类设置好后,直接next下一步即可;

9、步骤八:利用exe4j制作的.exe格式文件默认的是32位操作系统的文件,如果要制作64位操作系统的文件,可以按照下图进行选择设置;

10、步骤九:设置程序运行时jre的版本范围;

11、步骤十:因为创建的是java项目,项目最终是要在jvm上进行运行的,如果要用户自己安装jdk,配置环境变量非常的不方便,因此可以制作的过程中将jre封装进行,可以自己设定好运行环境jre的版本,让用户更加方便的使用程序,下图是为程序设定Jre运行环境的步骤:非常注意:jre要放在和jar包同级目录下,这样就可以写相对目录了,否则容易出现文件;

12、步骤十一:以后直接默认next即可:

三、通过安装Inno setup软件,将可执行的.exe文件、jar文件、jre文件封装到一个可以安装的.exe文件:

1、安装Inno setup软件,并启动该软件:

2、默认next即可:

3、设置程序安装时默认创建的安装文件夹以及程序的版本号等信息:

4、默认next即可:

5、选择可执行的.exe格式文件的目录:

6、将可执行的.exe文件、jar包、jre文件所在的文件夹添加进来,并且将该文件夹内的所有文件均添加进来,这样可以设置成相对路径了就:

7、默认next即可:

8、在.exe文件、jar包、jre文件所在的文件夹内创建1.txt、2.txt、3.txt三个文本文件,并按照下图依次设置即可,我也不知具体原因,可能是要存储一些运行过程中的信息吧:

9、默认next即可:

10、设置输出可安装的.exe格式文件的位置、输出的.exe格式的文件名称、可安装程序的桌面图标,

非常注意:

(1)可安装的.exe格式文件输出位置一定也要是jar包、jre文件、可执行.exe文件所在的文件夹;

(2)ICO格式的文件一定是通过PS输出ICO格式的图片,不能够将其它格式文件强制修改为ICO格式文件,否则会报异常:

java.io.IOException:icon file does not contain icon data

11、直接默认next,按照图片上步骤进行即可:

12、制作完毕,现在可以看一下可以安装的.exe格式文件了:

13、最终,只需要将可安装的exe文件,即上图片中的setup.exe(存储大的exe文件)发给用户安装即可,其它的jar包、jre、可执行exe等文件都封装在了可安装exe文件内,只用可安装的exe程序即可;

java实现可安装的exe程序的更多相关文章

  1. Java编程打开运行exe程序

    String path = "notepad.exe"; //(C:\Program Files\Tencent\QQ\Bin\qq.exe) try { Runtime runt ...

  2. 使用InstallAnywhere7.1制作Java exe程序安装包

    [转[使用InstallAnywhere7.1制作Java exe程序安装包 使用InstallAnywhere7.1制作Java exe程序安装包 对于已经完成的Java应用程序开发项目,从商业化角 ...

  3. java调c# exe 程序,exe里写文件问题

    应用场景描述: java web程序,触发 调用c#写的后台exe程序,发现exe里写的文件找不到.单独在cmd命令行下执行exe没问题: 问题查找: 由于exe里获取文件路径错误导致: 解决方法: ...

  4. 在执行Java命令或eclipse启动程序,提示报错’jvm.cfg无法找到’的解决办法

    一.问题背景 昨天debug代码的时候,突然发现无法启动程序了.每次启动程序的时候均报如下错误:(回家以后重现了下这个问题.发现不同电脑,所在的lib下的文件夹不一样,应该和jdk安装时硬件的情况有关 ...

  5. 经常遇到Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be e

     遇到问题描述: 运行android程序控制台输出 [2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error ...

  6. Android adb.exe程序启动不起来,如何处理

    经常遇到 Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be ...

  7. 解决Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be executed.

    遇到问题描述: 运行android程序控制台输出 [2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error ...

  8. C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装

    原文:C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装 要求: JDK.Mysql.Tomcat三者制作成一个安装包, 不能单独安装,安装过程不显示三者的界面, 安装完成要配置 ...

  9. Android adb.exe程序启动不起来处理方法

    经常遇到 Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be ...

随机推荐

  1. $(function(){})返回值$(document)

    $(function(){})返回值为$(document). 做出下面的操作:可以使得页面背景改变. $(function (){}).find('body').css('background',' ...

  2. 去除vue路由跳转地址栏后的哈希值#

    去除vue路由跳转地址栏后的哈希值#,我们只需要在路由跳转的管理文件router目录下的index.js中加上一句代码即可去掉哈希值# mode:"history" import ...

  3. JXl常用解析详解

    目的: java解析 excel 无非就是apache poi 或者 jxl 两者在使用上其实都差不多,关键还是看你自己熟悉那个,用那个!我也是初次接触jxl 看很多博客说 jxl只适用于处理小数据量 ...

  4. 遇到的一些vue的问题

    一.事件绑定中的事件处理方法后加不加括号问题 1.例如: click事件后加不加括号 a.@click = "getContent" b.@click = "getCon ...

  5. redis安装&启动

    1.下载:redis.io,我下载的是5.0. 2.安装 1).tar -zxvf redis-5.0.0 2).进入src目录,执行make 3.回退到src的上一级目录,编辑redis.conf ...

  6. setTimout( , 0) 详解

    setTimout( , 0) 一.前言 前端工程师们工作久了,一般都会在某些地方看见过这样的代码: setTimeout(function(){ // TODO }, 0); 举个实例,移动端我们经 ...

  7. <context:property-placeholder>标签实现参数剥离

    <context:property-placeholder>标签提供了一种优雅的外在化参数配置的方式(可以是键值对的形式保存在.properties文件中),不过该标签在spring配置文 ...

  8. Python+selenium之fixtures

    fixtures即可以表示测试用例的开始和结束,也可以表示测试类和测试模块的开始和结束. import unittest def setUpModule(): print("test mod ...

  9. 扒一扒IT大佬高考:马云数学1分考北大 李彦宏是状元

    http://news.cnblogs.com/n/522622/ 高考今天正式拉开序幕,而像李彦宏.马云等 IT 大佬之前也都参加过高考,他们成绩又都是怎样的呢? 马化腾:放弃天文梦选择计算机 20 ...

  10. 不写画面的网页程序设计,Web API、Web Service、WCF Service

    客户有一个系统,经常要连上我方,查询数据 以前的作法是给对方一个账号,让他可以连上我们的DB来查询. 所以,早期的同仁,真的给他们DB链接字符串 客户的Windows程序.网站就真的靠这么危险的方式, ...