3.0主要是增加界面,有界面了使用起来就更加方便,后续的优化暂时还没想好,如果看到这篇文章的人有什么好想法可以评论一下。后面本人的主要方向是将NewTab插件的漫画等更新提醒的功能做一个springboot的后台服务,并且开发一个uniapp来作为客户端,接收更新提醒。
本次界面开发使用的是Swing,界面很简陋,实现起来也不难,界面入下图所示,操作也很简单,输入要抓取小区在摇号/价格公示网站的id,然后选择抓取的种类,点击抓取按钮,等待抓取完成后,会在当前目录下生成excel文件。

在开发这个界面的过程中最大的收获是知道了如何将控制台日志输出到swing的组件中。直接上代码
OutputStream textAreaStream = new OutputStream() {
@Override
public void write(int b) throws IOException {
logTextArea.append(String.valueOf((char)b));
logTextArea.paintImmediately(logTextArea.getBounds());
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMaximum());
}
@Override
public void write(byte b[]) throws IOException {
logTextArea.append(new String(b));
logTextArea.paintImmediately(logTextArea.getBounds());
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMaximum());
}
@Override
public void write(byte b[], int off, int len) throws IOException {
logTextArea.append(new String(b, off, len));
logTextArea.paintImmediately(logTextArea.getBounds());
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMaximum());
}
};
PrintStream myOut = new PrintStream(textAreaStream);
System.setOut(myOut);
System.setErr(myOut);
具体原理就是使用System类的setOut方法,可以自定日志输出的方式。同时由于swing的界面刷新是在主线程上,抓取摇号数据比较慢就出现了抓取方法在执行可抓取的数据没有输出到swing的JTextArea组件上,需要等待抓取方法执行完毕之后才刷新。为此使用多线程去执行抓取方法,这样就解决了问题。
开发完界面后,就是打包和使用exe4j软件制作成exe程序。后面会写文章来介绍一下打包和使用exe4j过程中我遇到的问题。