一、最终界面

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

java 服务器 xmpp java 服务器管理工具_java 服务管理

java 服务器 xmpp java 服务器管理工具_java_02

java 服务器 xmpp java 服务器管理工具_java_03

把动态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.(Unknown Source)

(3)弹出提示信息框

使用静态方法

JOptionPane.showMessageDialog(null,res,"运行结果",JOptionPane.PLAIN_MESSAGE);

(4)图形初始化的时候不能显示控件,必须用鼠标改变一下界面大小才能显示

必须把frame.setVisible(true);放到界面初始化过程的最后,这样才能把所有的组件刷出来显示

(5)点击按钮的之后,运行停顿一下,loading图片显示不完整

原因是Runtime.getRuntime( “cmd”)过程有点费时,单线程处理的时候界面无法迅速响应,于是解决的办法也就有了,将点击按钮之后的动作放在另外一个单独的线程处理,为了让界面显示更流畅,可以加一个sleep(10)。

五、尚待改进的地方

按钮按下的瞬间图片应该变扁一些,这样看起来更有动态感

用定时器循环检查服务状态,防止用户在其他地方更改了服务,导致本程序与实际服务运行情况不符合