最近项目收尾,需要对开发的程序进行程序测试,要撰写用户手册、软件需求规格说明书,软件需求规格范例查看链接。
非常之难写(几乎一点项目资料背景都没有,全靠自己百度和瞎猜)、软件需求项目书都没有提,然后我很渣
由于本人是个渣渣,此条博客仅用于自我记录,勿喷,感谢。
上面都是水话,正文从这开始
打包Java程序为exe文件
我的程序是在eclipse里面开发的,之前没有打包成exe程序,都是直接运行的。为了项目需要,我整了个exe运行的版本。
参看 https://www.cnblogs.com/jepson6669/p/9211211.html 介绍的十分详细,并且该博客还有如何安装这个软件工具
另外里面-Dfile.encoding=utf-8,其实我eclispse里面默认的是GBK,再加上文件有从CMD命令行里面读取返回的信息,因此我第一次设成utf-8时,软件输出信息栏里面,只要是CMD返回的中文全部乱码了,但是其他都没有,很奇怪,改成-Dfile.encoding=gbk就好了
利用properties文件,让程序从外部读取参数
另外就是我本身有个config类,记录一些需要调用的环境如python.exe的路径,我之前整了个界面可以设置,但是感觉这种信息不应该这么暴露。最后是新建了一个properties文件,然后利用HashMap读取。
文件如下
BASEPATH=H:\\mission\\SeaIceSystem\\Program
Idlrt_PATH=C:\\Program Files\\Exelis\\IDL85\\bin\\bin.x86_64
Python_PATH=D:\\Anaconda3
MRT_PATH=D:\\MRT
Arcpy_Python_PATH=D:\\Python27\\ArcGIS10.2
阅读的代码如下
public void setPath() {
Map <String,String> map= new HashMap<String, String>();
map.put("BASEPATH", null);
map.put("Idlrt_PATH", null);
map.put("Python_PATH", null);
map.put("MRT_PATH", null);
map.put("Arcpy_Python_PATH", null);
Properties pps = new Properties();
try {
pps.load(new FileInputStream(System.getProperty("user.dir")+"\\properties\\Test.properties"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Enumeration enum1 = pps.propertyNames();//得到配置文件的名字
while(enum1.hasMoreElements()) {
String strKey = (String) enum1.nextElement();
String strValue = pps.getProperty(strKey);
System.out.println(strKey + "=" + strValue);
if (map.containsKey(strKey)) {
map.put(strKey, strValue);
}
}
Program.set_path(jta1,map);
}
程序从外部读取properties文件和图片
我利用了程序从外部读取图片,想让程序变得好看点,那么文件的拜访如下,properties文件的路径也利用了这个
代码可用,不管是在eclipse还是变成exe都可以使用。
jl1 = new JLabel(new ImageIcon(System.getProperty("user.dir")+"\\images\\Arctic_seaice.jpg"));//之前是"images\\Arctic_seaice.jpg"
在eclipse中,工程文件和image文件如下
在打包成exe之后,如下摆放
添加菜单栏——帮助及版权信息,并且为菜单栏按钮添加监听事件,弹窗提示信息,打开PDF文件
JMenuBar jmb; //菜单条组件
JMenu menu1;//菜单
JMenuItem item1, item2;//菜单项
//创建菜单
jmb = new JMenuBar();
menu1 = new JMenu("帮助");
item1 = new JMenuItem("版权说明");
item2 = new JMenuItem("用户手册");
item1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(null, "版权归属于XXX","版权信息",JOptionPane.PLAIN_MESSAGE);
}
});
item2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try {
Runtime.getRuntime().exec("rundll32 url.dll FileProtocolHandler " + System.getProperty("user.dir")+"\\help\\helpcontent.pdf");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
menu1.add(item1);
menu1.add(item2);
jmb.add(menu1);
this.setJMenuBar(jmb);