用Java开发一个本地服务管理软件

一、最终界面
先贴上最终效果图,图1为初始化界面,图二为点击启动/停止之后的中间过渡状态,图三为启动成功后弹出的提示框

用Java开发一个本地服务管理软件 用Java开发一个本地服务管理软件 用Java开发一个本地服务管理软件
把动态gif图片嵌入到jpg背景图中?用Adobe ImageReady即可办到

二、初衷

作为一个程序员,电脑里总是装了各式各样的开发工具,这些工具平时用不上,却一直在后台运行,浪费了大量的资源,为了响应国家“勤俭办一切事情”的号召,理所当然地要把这些偷偷摸摸吃资源的家伙杀掉。
为了实现这个目的,可以直接在windows系统服务里面关闭,但是这样的话,下次再用的时候还要到服务管理器里面去找,而且说不定我已经记不清服务名了。(有人说可以用dos命令啊,洒家都已经说过了,我连服务名都忘却了,自然没法用dos命令)
只有自己做的工具才是最顺手的,尝试自己做个工具管理这些常用的服务,经过几天的努力,终于做成了如上图所示的最终结果。期间复习了不少Java方面的知识,下面把开发过程中遇到的一些问题分享一下。
三、 结构
规划了三个java源文件:
winserviceframe.java:界面
winserviceActionHandler.java:响应管理
winservicecontroller.java:服务控制
界面初始化后,会根据当前时刻各个服务的状态,显示出用户可以进行的操作,如果当前服务正在运行,用户可以点击暂停按钮;如果当前服务已经停止,用户可以点击启动按钮。
点击按钮后,程序会去执行用户的命令,并将执行结果显示出来,如果执行成功,按钮的状态会发生翻转,否则保持不变。
四、 遇到的问题和解决的方法
(1) 如何在java代码里面实现对服务的控制
Process p = Runtime.getRuntime().exec(“cmd 命令”);
InputStreamReader inputsreader = new InputStreamReader(p.getInputStream());
BufferedReader bufreader = new BufferedReader(inputsreader);
注意Runtime.getRuntime().exec()方法局限性很大,不能处理稍微复杂一点的命令。为了调试的方便,最好把p.getErrorStream()的结果也输出一下。
(2) 添加按钮图片
ImageIcon img = new ImageIcon(this.getClass().getResource("img/test.png"));
buttonon = new JButton(img);
注意java里面不支持ico格式的图片,如果上述语句用ico图片处理的话,会显示错误:at javax.swing.ImageIcon.<init>(Unknown Source)
(3) 弹出提示信息框
使用静态方法
JOptionPane.showMessageDialog(null,res,"运行结果",JOptionPane.PLAIN_MESSAGE);
(4) 图形初始化的时候不能显示控件,必须用鼠标改变一下界面大小才能显示
必须把frame.setVisible(true);放到界面初始化过程的最后,这样才能把所有的组件刷出来显示
(5) 点击按钮的之后,运行停顿一下,loading图片显示不完整
原因是Runtime.getRuntime( “cmd”)过程有点费时,单线程处理的时候界面无法迅速响应,于是解决的办法也就有了,将点击按钮之后的动作放在另外一个单独的线程处理,为了让界面显示更流畅,可以加一个sleep(10)。
五、 尚待改进的地方
按钮按下的瞬间图片应该变扁一些,这样看起来更有动态感
用定时器循环检查服务状态,防止用户在其他地方更改了服务,导致本程序与实际服务运行情况不符合

下载链接:http://download.csdn.net/detail/mingziday/7323369

上一篇:Hibernate原生SQL查询


下一篇:Spring Boot2 系列教程 (十五) | 服务端参数校验之一