`
yeshaoting
  • 浏览: 683416 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

精简JRE - 实例Swing计算器 with 精简JRE(续)

阅读更多

 

 

上一篇文章 精简JRE - 实例Swing计算器 with 精简JRE 是在自己的电脑里进行测试的.

测试时只是将Java安装目录,改了个名为Java2;调试程序时再改回来.

于是学着写了个批处理文件: 

@echo off
cd "C:\Program Files"
if exist Java2 ( 
  rename Java2 Java
  echo Java2 exist. 
  echo Java not exist. ) else ( 
    if exist Java ( 
      rename Java Java2
      echo Java exist. ) else (
      echo Java not exist. )
    echo Java2 not exist.
)
@pause

   

后来发现测试程序时,直接设置path;高度程序时,则不设置path反倒更方便.

闲扯了些题外话....

 

本文主要介绍程序真正被移植到没安装JRE环境中出现的问题.

 

研究动机: 精简JRE并打包成exe文件的目的是想将Java程序更好的移植到没有事先安装JRE的XP系统中

 

因此,光在自己电脑上测试还是不行的,晚上试着将程序发到没装JRE的同学电脑上试运行,竟发现原来没有我想像的那么顺利(虽然事先有心理准备).

尽管之前拷贝程序所需要的类已经花了不少功夫,但是在实际操作中还是出现了ClassNotFoundException错误.

跟踪程序并将所缺失的类手动复制到之前精简的rt.jar中,复制的时候我发现都是形同AWTAutoShutdown$1.class的类文件缺失.

大家应该都知道这是AWTAutoShutdown类中的内部类被编译后生成的class文件.

 

猜测: 使用-verbose跟踪测试程序时,测试时某些内部类没有加载进来.(未深究)

由于不同的机器,硬件不同,Java底层处理图形图像的操作也不尽相同,所以出现在某些电脑中需要的类(特别是内部类)不同.看来没用到的内部类不能随便裁剪掉,最好保留(这是上一篇文章中提到类拷贝程序中未兼顾到).

 

改良办法:

1. 改良类拷贝程序,将相关的内部类一并拷贝出来.

2. 在未装JRE环境中再次调试,根据错误提示,将尚未拷贝到精简rt.jar中的类,手动拷贝出来,重新打包到rt.jar.

 

将因硬件不同而不同的类都加载进来才是最终的解决办法.

本人愚钝,不知道这些类的位置.望高手不吝 赐教.

 

程序打包成exe文件:

1. Java程序打包成exe文件 

2. BatToExe方法

REM  QBFC Project Options Begin
REM  HasVersionInfo: Yes
REM  Companyname: 可信软件与移动计算
REM  Productname: 计算器
REM  Filedescription: 计算器 - 爪哇哥
REM  Copyrights: 爪哇哥
REM  Trademarks: jarg
REM  Originalname: Calucator
REM  Comments: 
REM  Productversion:  1. 0. 0. 0
REM  Fileversion:  1. 0. 0. 0
REM  Internalname: Calucator
REM  Appicon: C:\Documents and Settings\Administrator\桌面\j2exe\Calucator(Java打包成exe文件)\pic\ico.ico
REM  Embeddedfile: C:\Documents and Settings\Administrator\桌面\jreDIY\Calucator.jar
REM  QBFC Project Options End

@echo off
set path="./jre/bin"
start /b javaw  -cp "./jre/lib" -jar Calucator.jar
@pause

   

start /b javaw实现控制台隐藏目的

 

在BatToExe中打开类似上述的bat文件,进行相应的设置,生成exe文件(具体步骤略). 

 

在从未安装JRE环境中运行情况:



 

 

附件中的二个压缩文件在从未安装JRE的XP系统中测试过(计算器源程序来源于网络). 

   

  • 大小: 17 KB
  • 大小: 29.8 KB
分享到:
评论
45 楼 xianweisi 2014-09-14  
竟然还有马
44 楼 yeshaoting 2011-01-14  
zhangcong170 写道
人生在于折腾  如果不折腾的话,天天平淡如水 也太没意思了 
支持楼主继续研究下去  关注下

有道理....继续继续~~~
谢谢你的支持
43 楼 zhangcong170 2011-01-14  
人生在于折腾  如果不折腾的话,天天平淡如水 也太没意思了 
支持楼主继续研究下去  关注下
42 楼 DOCDOC 2011-01-13  
mathgl 写道
DOCDOC 写道
好吧,拿出俺喜欢的:

Excel & VBA
要更牛X的功能,加上一个Access

至少可以做出很多适合办公用的小程序(搞娱乐当然8行咯)。


我第一个公司的生产部门的头,是个女的,自动化出身,自己在access搞了一个生产管理用的应用来。

还顺便用excel开发了一个基于 线性规划外带图表的小应用。不比一般的java来得差。

有些公司专职做基于excel的开发。

ms的office系列功能强大,只是一般人很少能用尽罢了...

这东西特别强大,做做简单的BI类应用,基本可以满足小公司的需求。
我常对人侃:MS Office 在手,别无他求
41 楼 mathgl 2011-01-13  
DOCDOC 写道
好吧,拿出俺喜欢的:

Excel & VBA
要更牛X的功能,加上一个Access

至少可以做出很多适合办公用的小程序(搞娱乐当然8行咯)。


我第一个公司的生产部门的头,是个女的,自动化出身,自己在access搞了一个生产管理用的应用来。

还顺便用excel开发了一个基于 线性规划外带图表的小应用。不比一般的java来得差。

有些公司专职做基于excel的开发。

ms的office系列功能强大,只是一般人很少能用尽罢了...
40 楼 comsci 2011-01-13  
也许,这就叫“民主”。。。
39 楼 DOCDOC 2011-01-13  
好吧,拿出俺喜欢的:

Excel & VBA
要更牛X的功能,加上一个Access

至少可以做出很多适合办公用的小程序(搞娱乐当然8行咯)。
38 楼 DOCDOC 2011-01-13  
smzd 写道
用.NET开发的话只不过省却了.NET的虚拟机而已。不知道如果算上这个又有多大呢?

再过几年,找到一台没有.NET Framework的Windows机器,是很难了
37 楼 DOCDOC 2011-01-13  
yawei 写道
那你用低版本不行么?2.0就可以。
再说了,以后慢慢老版本的XP淘汰了,你能找到不带.NET Framework的Windows机器还真难。
你做一个计算器什么的东西,难道要把Qt的类库全部打包么?
说实话,Java做桌面应用不是主流,真的要做正儿八经桌面应用的,你还需要精简JRE么?(再说了,这里还有法律上的问题)
-------------------------------------
in fact .net also has a lot of problem. have you ever had the case that you need to downgrad .net from 3.5 o 2.0? or you pc doesn't have internet so you can't install .net?

QT is good but not easy to start.

Java做桌面应用不是主流 is exactly because jre. you can't either redistribute it or desize it because 法律上的问题.

hopefully the java from apache can fix this problem


----------------
离线包不行么?再说了,如果在企业内部实施的话,装.NET Framework或完整的JRE,都不是问题。如果是你做面向”消费类用户“的桌面软件,用Java,岂不是笑话?
能好好说中国话不?还是说没有输入法?
36 楼 yeshaoting 2011-01-13  
lx_corn 写道
高级程序员  只是穷折腾累了

同意~
35 楼 yeshaoting 2011-01-13  
yawei 写道
那你用低版本不行么?2.0就可以。
再说了,以后慢慢老版本的XP淘汰了,你能找到不带.NET Framework的Windows机器还真难。
你做一个计算器什么的东西,难道要把Qt的类库全部打包么?
说实话,Java做桌面应用不是主流,真的要做正儿八经桌面应用的,你还需要精简JRE么?(再说了,这里还有法律上的问题)
-------------------------------------
in fact .net also has a lot of problem. have you ever had the case that you need to downgrad .net from 3.5 o 2.0? or you pc doesn't have internet so you can't install .net?

QT is good but not easy to start.

Java做桌面应用不是主流 is exactly because jre. you can't either redistribute it or desize it because 法律上的问题.

hopefully the java from apache can fix this problem


hopefully the java from apache can fix this problem!!
34 楼 smzd 2011-01-13  
用.NET开发的话只不过省却了.NET的虚拟机而已。不知道如果算上这个又有多大呢?
33 楼 yawei 2011-01-13  
那你用低版本不行么?2.0就可以。
再说了,以后慢慢老版本的XP淘汰了,你能找到不带.NET Framework的Windows机器还真难。
你做一个计算器什么的东西,难道要把Qt的类库全部打包么?
说实话,Java做桌面应用不是主流,真的要做正儿八经桌面应用的,你还需要精简JRE么?(再说了,这里还有法律上的问题)
-------------------------------------
in fact .net also has a lot of problem. have you ever had the case that you need to downgrad .net from 3.5 o 2.0? or you pc doesn't have internet so you can't install .net?

QT is good but not easy to start.

Java做桌面应用不是主流 is exactly because jre. you can't either redistribute it or desize it because 法律上的问题.

hopefully the java from apache can fix this problem
32 楼 lx_corn 2011-01-12  
高级程序员  只是穷折腾累了
31 楼 yeshaoting 2011-01-12  
DOCDOC 写道
jorneyR 写道
DOCDOC 写道
yeshaoting 写道
Kisses99 写道
个人意见,这就是穷折腾。
不保持JRE的完整性,得不偿失。


本人尚且只是一个初级程序员,个性愚钝,还不能理解JRE完整性的意义.
可能真的以后会意识到这点.现在只是觉得如果在将一个7KB的计算器给用户的同时,还需要他们安装90+MB的JRE,设置环境变量,我想人家一定整崩溃了.

在很多高级程序员眼里其实我们这些初级程序员做得很多事都是在穷折腾.
如果能换个角度思考的话,我们是在探索.

7KB的计算器要装4M的JRE,呵呵,50步笑百步哦
做桌面,老老实实用.NET或C++&Qt吧

你这个可就不对了,.net如果是用高版本,在xp里一样要装.net framework,这个可不小。
C++看你要用谁了,VCL,MFC同样要带上一些系统里没有的dll
Qt:难道你不知道要带上如qcore4.dll, qgui4.dll之类的dll?这几个加起来最起码比好像是10M左右,如果在Windows使用GCC开发的,还要带上相应的dll,有的时候如果用到了QWebView,这个记得在Qt4.5时有18M左右,总的加起来,Qt写个小程序大小也是不小的

为什么总要鄙视别人的努力?你不需要,总会有用得着的人,当你的程序是发布给很多人用的时候,不带JRE,而大多数用户不会安装,痛苦的是你。

那你用低版本不行么?2.0就可以。
再说了,以后慢慢老版本的XP淘汰了,你能找到不带.NET Framework的Windows机器还真难。
你做一个计算器什么的东西,难道要把Qt的类库全部打包么?
说实话,Java做桌面应用不是主流,真的要做正儿八经桌面应用的,你还需要精简JRE么?(再说了,这里还有法律上的问题)

Java做web,手机开发比较强势.
确实有法律上的问题.要保证JRE的完整性,修改的JRE不允许商业发布.
30 楼 yeshaoting 2011-01-12  
jorneyR 写道
DOCDOC 写道
yeshaoting 写道
Kisses99 写道
个人意见,这就是穷折腾。
不保持JRE的完整性,得不偿失。


本人尚且只是一个初级程序员,个性愚钝,还不能理解JRE完整性的意义.
可能真的以后会意识到这点.现在只是觉得如果在将一个7KB的计算器给用户的同时,还需要他们安装90+MB的JRE,设置环境变量,我想人家一定整崩溃了.

在很多高级程序员眼里其实我们这些初级程序员做得很多事都是在穷折腾.
如果能换个角度思考的话,我们是在探索.

7KB的计算器要装4M的JRE,呵呵,50步笑百步哦
做桌面,老老实实用.NET或C++&Qt吧

你这个可就不对了,.net如果是用高版本,在xp里一样要装.net framework,这个可不小。
C++看你要用谁了,VCL,MFC同样要带上一些系统里没有的dll
Qt:难道你不知道要带上如qcore4.dll, qgui4.dll之类的dll?这几个加起来最起码比好像是10M左右,如果在Windows使用GCC开发的,还要带上相应的dll,有的时候如果用到了QWebView,这个记得在Qt4.5时有18M左右,总的加起来,Qt写个小程序大小也是不小的

为什么总要鄙视别人的努力?你不需要,总会有用得着的人,当你的程序是发布给很多人用的时候,不带JRE,而大多数用户不会安装,痛苦的是你。


谢谢支持~
29 楼 jorneyR 2011-01-12  
DOCDOC 写道
jorneyR 写道
DOCDOC 写道
yeshaoting 写道
Kisses99 写道
个人意见,这就是穷折腾。
不保持JRE的完整性,得不偿失。


本人尚且只是一个初级程序员,个性愚钝,还不能理解JRE完整性的意义.
可能真的以后会意识到这点.现在只是觉得如果在将一个7KB的计算器给用户的同时,还需要他们安装90+MB的JRE,设置环境变量,我想人家一定整崩溃了.

在很多高级程序员眼里其实我们这些初级程序员做得很多事都是在穷折腾.
如果能换个角度思考的话,我们是在探索.

7KB的计算器要装4M的JRE,呵呵,50步笑百步哦
做桌面,老老实实用.NET或C++&Qt吧

你这个可就不对了,.net如果是用高版本,在xp里一样要装.net framework,这个可不小。
C++看你要用谁了,VCL,MFC同样要带上一些系统里没有的dll
Qt:难道你不知道要带上如qcore4.dll, qgui4.dll之类的dll?这几个加起来最起码比好像是10M左右,如果在Windows使用GCC开发的,还要带上相应的dll,有的时候如果用到了QWebView,这个记得在Qt4.5时有18M左右,总的加起来,Qt写个小程序大小也是不小的

为什么总要鄙视别人的努力?你不需要,总会有用得着的人,当你的程序是发布给很多人用的时候,不带JRE,而大多数用户不会安装,痛苦的是你。

那你用低版本不行么?2.0就可以。
再说了,以后慢慢老版本的XP淘汰了,你能找到不带.NET Framework的Windows机器还真难。
你做一个计算器什么的东西,难道要把Qt的类库全部打包么?
说实话,Java做桌面应用不是主流,真的要做正儿八经桌面应用的,你还需要精简JRE么?(再说了,这里还有法律上的问题)


虽然长时间不用Windows,如果我没有记错,.net 2.0的framework在xp也是需要安装的,好像安装包有20M左右,最主要是不会的用户继续不会,会的用户继续会。
总会有新技术出现的,对于更新版的.net呢?同样的路总会重复。
28 楼 jorneyR 2011-01-12  
003 写道
这个帖子看到这里,老三我也大开眼界了。
本来还想择日把SwingC的代码开了,现在想想还是不要穷折腾了。
富不折腾的你们一路走好,谢谢!

总是容不下与自己不同的意见,是一个很大的问题。
也许当你开源后,讨论的不是你的设计思路与想法,亮点,缺点,却总是指责你程序中的某处不足,甚至上升到人格。有点脾气的人都会难受。
我们接受的是讨论,分析,而不是指责,毕竟我们没有主动去伤害过谁。
27 楼 003 2011-01-12  
这个帖子看到这里,老三我也大开眼界了。
本来还想择日把SwingC的代码开了,现在想想还是不要穷折腾了。
富不折腾的你们一路走好,谢谢!
26 楼 DOCDOC 2011-01-12  
VB也不错哦

相关推荐

    精简JRE - 实例Swing计算器 with 精简JRE

    标题 "精简JRE - 实例Swing计算器 with 精简JRE" 提供了两个主要知识点:一是关于Java的精简版运行时环境(JRE),另一个是使用Swing构建的计算器应用。 1. **精简JRE**: Java运行时环境(JRE)是执行Java应用...

    jadx-gui-1.4.6-with-jre-win.zip.cab

    jadx-gui-1.4.6-with-jre-win.zip.cab

    jre-8u301.zip

    (1)jre-8u301-linux-i586.rpm (2)jre-8u301-linux-i586.tar.gz (3)jre-8u301-linux-x64.rpm (4)jre-8u301-linux-x64.tar.gz (5)jre-8u301-macosx-x64.dmg (6)jre-8u301-macosx-x64.tar.gz (7)jre-8u...

    jadx-gui-1.1.0-with-jre-window.zip

    首先,"jadx-gui-1.1.0-with-jre-windows.zip"是jadx-gui的Windows版本,包含了jadx-gui的1.1.0更新,并集成了Java运行环境(JRE),这意味着用户无需单独安装JRE即可运行此软件。这在遇到网络速度不佳时,提供了...

    jre-8u231-windows-x64/jre-8u231-windows-i586

    标题中的"jre-8u231-windows-x64"和"jre-8u231-windows-i586"指的是Java JRE的特定版本,这里的"8u231"表示的是Java 8的更新版本号231,"windows"则表明这是为Windows操作系统设计的。"x64"代表64位系统,而"x86"或...

    jadx-gui-1.2.0-with-jre-win.zip

    【标题】"jadx-gui-1.2.0-with-jre-win.zip"是一个针对Windows平台的Android APK反编译工具包,包含了jadx-gui的1.2.0版本和Java运行环境(JRE)。 【描述】该工具的主要功能是帮助开发者或安全研究人员对Android...

    jre-7u9-windows-x64

    标题“jre-7u9-windows-x64”指的是Java Runtime Environment(JRE)的第7个主要版本的第9次更新,专为64位Windows操作系统设计。JRE是Oracle公司提供的Java平台的核心组件,它包含了运行Java应用程序所需的全部环境...

    jre-6u21-windows-i586

    标题“jre-6u21-windows-i586”所指的是一款针对Windows操作系统,32位(i586)平台的Java运行环境(Java Runtime Environment,简称JRE)的更新版本,具体为6u21版。Java运行环境是运行Java应用程序所必需的基础...

    jre-8u202-windows-x64.exe

    jre-8u202-windows-x64.exe适用于Windows x64位系统,是在Binary Code License (“BCL”)许可协议下提供最后的免费商业版本,允许用在生产环境中; 对于 2019 年 4 月 16 日开始的版本,Oracle JDK 许可协议已更改...

    jre-8u241-windows-x64.exe

    jre-8u241-windows-x64.exe jre-8u241-windows-x64.exe jre-8u241-windows-x64.exe 避免官网下载,官网下载太麻烦了。

    jre-8u202-windows-x64.tar.gz

    jre-8u202-windows-x64.tar.gz适用于Windows x64位系统,是在Binary Code License (“BCL”)许可协议下提供最后的免费商业版本,允许用在生产环境中; 对于 2019 年 4 月 16 日开始的版本,Oracle JDK 许可协议已...

    jadx-gui-1.1.0-with-jre-windows.zip

    标题中的“jadx-gui-1.1.0-with-jre-windows.zip”指出这是一个针对Windows操作系统的软件包,包含jadx-gui的1.1.0版本,并且集成了Java运行环境(JRE)。jadx-gui是一款流行的反编译工具,特别适用于Android应用...

    jre-8u152-windows-x64

    标题“jre-8u152-windows-x64”指的是Java Runtime Environment(JRE)的特定版本,这是Oracle公司提供的用于执行Java应用程序的软件组件。这个版本是8u152,意即Java 8的第152次更新,针对Windows 64位操作系统。...

    jre-windows-java环境.rar

    在给定的压缩包"jre-windows-java环境.rar"中,包含了针对Windows操作系统的Java环境安装文件以及一个使用教程,帮助用户在他们的计算机上设置和使用Java环境。 1. **Java虚拟机(JVM)**:JRE的核心部分是Java...

    eclipse-temurin-alpine-jre-17

    eclipse-temurin官网下载的eclipse-temurin-alpine-jre-17

    jre-8u401-windows-x64

    jre-8u401-windows-x64

    jre-8u371-windows-x64 1.8

    jre-8u371-windows-x64 1.8

    jre-7u21-windows-x64.rar

    标题“jre-7u21-windows-x64.rar”指的是Java Runtime Environment(JRE)的版本7更新21的64位Windows版的压缩文件。JRE是Oracle公司提供的用于执行Java应用程序的软件环境,它包含了Java虚拟机(JVM)、类库和其他...

    jre-7u17-windows-i586

    "jre-7u17-windows-i586"这个标题表明这是一个针对Windows操作系统32位(i586架构)的Java 7 Update 17版本的JRE安装包。这个版本的发布旨在为用户提供了运行基于Java技术的应用程序所需的运行时环境。 Java是一种...

    server-jre-8u202-linux-x64.tar.gz

    Server JRE (Java SE Runtime Environment) 8u202,server-jre-8u202-linux-x64.tar.gz适用于Linux 64位系统,是在Binary Code License (“BCL”)许可协议下提供最后的免费商业版本,允许用在生产环境中;...

Global site tag (gtag.js) - Google Analytics