diff --git a/src/main/java/cn/zhouyafeng/itchat4j/service/impl/LoginServiceImpl.java b/src/main/java/cn/zhouyafeng/itchat4j/service/impl/LoginServiceImpl.java index 0be1bf7..9711cb3 100644 --- a/src/main/java/cn/zhouyafeng/itchat4j/service/impl/LoginServiceImpl.java +++ b/src/main/java/cn/zhouyafeng/itchat4j/service/impl/LoginServiceImpl.java @@ -41,6 +41,7 @@ import cn.zhouyafeng.itchat4j.utils.enums.parameters.LoginParaEnum; import cn.zhouyafeng.itchat4j.utils.enums.parameters.StatusNotifyParaEnum; import cn.zhouyafeng.itchat4j.utils.enums.parameters.UUIDParaEnum; import cn.zhouyafeng.itchat4j.utils.tools.CommonTools; +import xyz.wbsite.itchat4j.util.ImageUtil; /** * 登陆服务实现类 @@ -140,7 +141,8 @@ public class LoginServiceImpl implements ILoginService { out.flush(); out.close(); try { - CommonTools.printQr(qrPath); // 打开登陆二维码图片 +// CommonTools.printQr(qrPath); // 打开登陆二维码图片 + ImageUtil.show(ImageUtil.load(new File(qrPath))); } catch (Exception e) { LOG.info(e.getMessage()); } diff --git a/src/main/java/xyz/wbsite/itchat4j/JMainApplication.java b/src/main/java/xyz/wbsite/itchat4j/JMainApplication.java index be0bbe1..b128d98 100644 --- a/src/main/java/xyz/wbsite/itchat4j/JMainApplication.java +++ b/src/main/java/xyz/wbsite/itchat4j/JMainApplication.java @@ -64,13 +64,8 @@ public class JMainApplication extends Application { } }); -// FileUtil.file(FileUtil.getTmpDir(), "itchat4j."); - String qrPath = "C:\\Users\\Administrator\\Desktop\\111"; // 保存登陆二维码图片的路径,这里需要在本地新建目录 - IMsgHandlerFace msgHandler = new JMsgHandler(); // 实现IMsgHandlerFace接口的类 - Wechat wechat = new Wechat(msgHandler, qrPath); // 【注入】 - // 启动服务,会在qrPath下生成一张二维码图片,扫描即可登陆,注意,二维码图片如果超过一定时间未扫描会过期,过期时会自动更新,所以你可能需要重新打开图片 - wechat.start(); - + // 服务初始化 + JMainService.init(); } public static void main(String[] args) { diff --git a/src/main/java/xyz/wbsite/itchat4j/JMainController.java b/src/main/java/xyz/wbsite/itchat4j/JMainController.java index e74e6a1..6a87ee1 100644 --- a/src/main/java/xyz/wbsite/itchat4j/JMainController.java +++ b/src/main/java/xyz/wbsite/itchat4j/JMainController.java @@ -96,6 +96,14 @@ public class JMainController implements Initializable { this.start.setDisable(true); this.stop.setDisable(false); Logger.info("启动服务"); + if (!JMainService.getInstance().run) { + boolean start = JMainService.start(); + if (!start) { + Logger.error("服务启动失败"); + return; + } + Logger.info("服务启动成功"); + } } } @@ -108,6 +116,15 @@ public class JMainController implements Initializable { this.start.setDisable(false); this.stop.setDisable(true); Logger.info("停止服务"); + if (JMainService.getInstance().run) { + boolean stop = JMainService.stop(); + if (!stop) { + Logger.error("服务停止失败"); + return; + } + Logger.info("服务停止成功"); + this.preview.setImage(null); + } } } diff --git a/src/main/java/xyz/wbsite/itchat4j/JMainService.java b/src/main/java/xyz/wbsite/itchat4j/JMainService.java new file mode 100644 index 0000000..f4dd2cb --- /dev/null +++ b/src/main/java/xyz/wbsite/itchat4j/JMainService.java @@ -0,0 +1,100 @@ +package xyz.wbsite.itchat4j; + +import cn.hutool.core.io.FileUtil; +import cn.zhouyafeng.itchat4j.Wechat; +import xyz.wbsite.itchat4j.util.Logger; + +import java.io.File; + +/** + * 服务线程 + * + * @author wangbing + * @version 0.0.1 + * @since 1.8 + */ +public class JMainService { + + /** + * 单例对象 + */ + private static JMainService instance; + + private static Wechat wechat; + + public static synchronized JMainService getInstance() { + if (instance == null) { + JMainService.instance = new JMainService(); + } + return instance; + } + + /** + * 服务运行状态 + */ + public boolean run; + + /** + * 守护线程 + */ + public LoginThread loginThread; + + /** + * 服务内部构造器 + */ + private JMainService() { + Logger.info("初始化服务"); + } + + public static void init() { + + } + + public void createDaemon() { + Logger.info("初始化线程"); + this.loginThread = new LoginThread(); + this.loginThread.setDaemon(true); + Logger.info("启动线程"); + this.run = true; + this.loginThread.start(); + } + + public static boolean start() { + if (JMainService.getInstance().run) { + Logger.info("服务已启动"); + return false; + } + + // 创建线程 + JMainService.getInstance().createDaemon(); + return true; + } + + public static boolean stop() { + if (!JMainService.getInstance().run) { + Logger.info("服务未启动"); + return false; + } + // 停止服务 + JMainService.getInstance().run = false; + // 关闭守护线程 + JMainService.getInstance().loginThread.interrupt(); + Logger.info("正在停止脚本"); + return true; + } + + /** + * 登录线程 + */ + public class LoginThread extends Thread { + + @Override + public void run() { + // 保存登陆二维码图片的路径,这里需要在本地新建目录 + File qrPath = FileUtil.mkdir(new File(FileUtil.getTmpDir(), "itchat4j")); + wechat = new Wechat(new JMsgHandler(), qrPath.getAbsolutePath()); + // 启动服务,会在qrPath下生成一张二维码图片,扫描即可登陆,注意,二维码图片如果超过一定时间未扫描会过期,过期时会自动更新,所以你可能需要重新打开图片 + wechat.start(); + } + } +} diff --git a/src/main/java/xyz/wbsite/itchat4j/util/ImageUtil.java b/src/main/java/xyz/wbsite/itchat4j/util/ImageUtil.java index 2849bfc..0574702 100644 --- a/src/main/java/xyz/wbsite/itchat4j/util/ImageUtil.java +++ b/src/main/java/xyz/wbsite/itchat4j/util/ImageUtil.java @@ -90,16 +90,7 @@ public class ImageUtil { * @param image 图片 */ public static void show(BufferedImage image) { - Image showImage = image; - // 图片宽高都大于预览窗口时进行缩放显示 - if (image.getWidth() > 192 || image.getHeight() > 108) { - // 宽高比大于预览窗口,适配宽, 否则适配高 - if (1D * image.getWidth() / image.getHeight() > 192D / 108D) { - showImage = ImgUtil.scale(showImage, 1.0f * 192 / image.getWidth()); - } else { - showImage = ImgUtil.scale(showImage, 1.0f * 108 / image.getHeight()); - } - } + Image showImage = ImgUtil.scale(image, 192, 192); byte[] bytes = ImgUtil.toBytes(showImage, "PNG"); javafx.scene.image.Image image1 = new javafx.scene.image.Image(IoUtil.toStream(bytes)); JMainApplication.mainController.preview(image1);