Java 简易通讯录 第一、二版

下面按照解决矛盾的(填坑)顺序说一下。

一、功能实现

因为想把数据库嵌入程序,肯定就不能太大了。所以采用了 derby,一个非常小的数据库,只有 3MB 大小。这个数据库是完全用 java 编写的,可以嵌在应用程序中(我这个就是),也可以作为单独的数据库服务器(需要再加载另一个 jar 文件)。

BUG 1.1:某些按键功能不正常。

原因: 判断输入框( JTextFiled )判断为空条件不准确。

解决方法:

BUG 1.2:以姓名为空进行查询时,只能显示第一个手机号码。

原因:查询语句不正确和 getstring() 不正确。可以看出下图的两个查询语句的不同:”select * from” 和 “select phone from” ,前者是输出这一行的数据,一次while会输出两个语句,但是后者只会输出 phone 列的数据,一次只有一个语句。这样,在输出的时候会报错,造成只会输出第一个语句的假象。

解决方法:将str 设置为 str2 语句。

二、导出可运行的 jar 包

这一步时,生成的 jar 包,第一次按下按钮时,都会建立程序设定的 myDB 数据库文件夹。

除此之外,没有一点点的反应

我一直以为是因为数据库没有成功导出的问题,一直在查怎么导出带数据库的 Jar 包,无功而返。

第二天再查的时候,给程序每一部分前后都加了语句,如果顺利进行会在内容栏输出对应语句。

然后我发现数据库是处于成功链接的状态的!前面几步都是成功的!

那么为什么没有输出?

我找到对应的失败地方,加上了输出错误原因的语句。

BUG 2.1:没有找到对应的表。

原因:打包时没有把建立的表加进去。

解决方案:增加了判断条件,补充建表功能。(造成BUG 2.4)

解决方案:默默去掉。

BUG 2. 3:某些按键不能输出对应范围的数据。

解决方案:完善判断逻辑。

BUG 2.4:程序只在第一次成功运行。

原因: 我没有考虑 try catch 来建表。而是创建了一个全局变量,但是第二次打开时全局变量会初始化。

解决方案:新增了“初始化”按钮,将初始化功能分离出来。(在第三版改善了这个操作)

最后,程序功能已经基本完善,可以本地保存数据,重复使用。初始化的时候会建立一个 myDB 文件夹和一个 derby.log 日志。删除这两个文件数据就没有咯。

三、打包为 exe

BUG 3.1:首先再尝试了一波 exe4j 打包工具,提示 jre 文件被破坏。

原因:在设置条件时候,没有选择“Generate 64-bit executeable”。32位系统直接默认就好,64位系统必须勾上这个选项。

解决方案:勾上这个选项。

需要注意的是,这个页面选择程序之前生成好的 jar 及主类就可以了。(derby.jar在生成的时候已经加在 addressList.jar 了,所以不需要再加了)(这个软件如果没有输入注册码,生成的软件会有提示)

Jar2Exe 程序也需要选择对应的位数,64位勾上就好了。32位不用。(这个软件相对简单)

接下来在没有 Java 环境的64位虚拟机上测试,复制本机的 jre 文件,设置相对路径的环境变量,exe 文件成功打开。

BUG 3.2:在没有 Java 环境的 32 位虚拟机上进行相同的测试。exe 文件打不开,提示 Java 环境被破坏。

原因: jre 也分 32 位与 64 位。

解决方案:下载一份32位 jre 替换。成功运行。

用 Inno 做成 exe 安装文件。成功。

最后一个大坑,如何精简 jre?这两个包解压缩后都是180mb,一个几Mb的小程序带这么大的环境吗。查了半天没有解决。只能暂时留着了。没有Java 环境的用户下载一个 jre 压缩包就好了,与 jar 包放在同一个目录下(环境变量好像有点问题=。=,推荐直接搭建JAVA环境)

最主要的是!!!捕获异常的重要性!!!切记!!!

源码地址:https://github.com/evenIfAlsoGo/someTools/tree/master/addressList

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171209G0RX1Z00?refer=cp_1026

扫码关注云+社区