diff --git a/README.md b/README.md
index 03608db..05b87ad 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,21 @@
-# starter-jmacro
+# 简介
+JMacro使用Java Robot工具实现的自动化/脚本脚手架,屏幕找图,定位,模拟人操作鼠标、键盘等基本事件。
-java版按键精灵实现基础
\ No newline at end of file
+#背景
+
+
+
+###环境依赖
+jdk1.8
+
+### 构建工具
+Maven 3+
+
+### 依赖说明
+Hutool:一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率
+
+##打包EXE可执行文件
+```
+maven package
+```
+执行程序输出目录target
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index b5edd2c..f319a28 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,12 +2,12 @@
4.0.0
- com.example
- starter-jmacro-wjdr
- 0.0.1-SNAPSHOT
+ xyz.wbsite
+ jmacro
+ 0.1
jar
- starter-jmacro-wjdr
+ jmacro
project for jmacro
@@ -82,6 +82,83 @@
${java.version}
+
+
+
+ com.zenjava
+ javafx-maven-plugin
+ 8.8.3
+
+
+ xyz.wbsite.jmacro.JMainApplication
+
+ ${project.artifactId}
+
+ ${project.artifactId}
+
+ ${project.artifactId}.jar
+
+ ${project.version}
+
+
+ ${project.basedir}/src/main/resources/icon.ico
+
+
+ true
+
+ true
+
+
+
+ create-jfx-jar
+ package
+
+ build-jar
+
+
+
+ create-exe
+ package
+
+ build-native
+
+
+
+
+
+
+
+ maven-antrun-plugin
+
+
+ package
+
+ run
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/example/jmacro/wjdr/JMacro.java b/src/main/java/xyz/wbsite/jmacro/JMacro.java
similarity index 98%
rename from src/main/java/com/example/jmacro/wjdr/JMacro.java
rename to src/main/java/xyz/wbsite/jmacro/JMacro.java
index a41a86b..ee0bb2b 100644
--- a/src/main/java/com/example/jmacro/wjdr/JMacro.java
+++ b/src/main/java/xyz/wbsite/jmacro/JMacro.java
@@ -1,15 +1,15 @@
-package com.example.jmacro.wjdr;
+package xyz.wbsite.jmacro;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.RandomUtil;
-import com.example.jmacro.wjdr.base.Legend;
-import com.example.jmacro.wjdr.base.ViewColor;
-import com.example.jmacro.wjdr.base.ViewPoint;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.util.ColorUtil;
-import com.example.jmacro.wjdr.util.ImageUtil;
-import com.example.jmacro.wjdr.util.Logger;
-import com.example.jmacro.wjdr.util.TaskUtil;
+import xyz.wbsite.jmacro.base.Legend;
+import xyz.wbsite.jmacro.base.ViewColor;
+import xyz.wbsite.jmacro.base.ViewPoint;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.util.ColorUtil;
+import xyz.wbsite.jmacro.util.ImageUtil;
+import xyz.wbsite.jmacro.util.Logger;
+import xyz.wbsite.jmacro.util.TaskUtil;
import java.awt.*;
import java.awt.event.InputEvent;
diff --git a/src/main/java/com/example/jmacro/wjdr/JMainApplication.java b/src/main/java/xyz/wbsite/jmacro/JMainApplication.java
similarity index 91%
rename from src/main/java/com/example/jmacro/wjdr/JMainApplication.java
rename to src/main/java/xyz/wbsite/jmacro/JMainApplication.java
index 05746f3..2d26658 100644
--- a/src/main/java/com/example/jmacro/wjdr/JMainApplication.java
+++ b/src/main/java/xyz/wbsite/jmacro/JMainApplication.java
@@ -1,10 +1,9 @@
-package com.example.jmacro.wjdr;
+package xyz.wbsite.jmacro;
-import com.example.jmacro.wjdr.base.Legend;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.ui.FXMLUtil;
-import com.example.jmacro.wjdr.util.Logger;
-import com.example.jmacro.wjdr.util.ResourceUtil;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.ui.FXMLUtil;
+import xyz.wbsite.jmacro.util.Logger;
+import xyz.wbsite.jmacro.util.ResourceUtil;
import com.melloware.jintellitype.JIntellitype;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
@@ -81,6 +80,7 @@ public class JMainApplication extends Application {
}
mouseLeftDoubleClick(电脑);
ViewRect 关闭 = waitAndFindLegend(of("关闭"), 0.99, 10);
+
if (关闭 == null) {
return;
}
diff --git a/src/main/java/com/example/jmacro/wjdr/JMainController.java b/src/main/java/xyz/wbsite/jmacro/JMainController.java
similarity index 77%
rename from src/main/java/com/example/jmacro/wjdr/JMainController.java
rename to src/main/java/xyz/wbsite/jmacro/JMainController.java
index 0b08844..e7aecbb 100644
--- a/src/main/java/com/example/jmacro/wjdr/JMainController.java
+++ b/src/main/java/xyz/wbsite/jmacro/JMainController.java
@@ -1,13 +1,12 @@
-package com.example.jmacro.wjdr;
+package xyz.wbsite.jmacro;
-import cn.hutool.core.thread.ThreadUtil;
-import com.example.jmacro.wjdr.base.Legend;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.tool.PickLegend;
-import com.example.jmacro.wjdr.tool.PickPoint;
-import com.example.jmacro.wjdr.tool.PickRect;
-import com.example.jmacro.wjdr.util.DialogUtil;
-import com.example.jmacro.wjdr.util.TaskUtil;
+import xyz.wbsite.jmacro.base.Legend;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.tool.Measure;
+import xyz.wbsite.jmacro.tool.PickLegend;
+import xyz.wbsite.jmacro.tool.PickPoint;
+import xyz.wbsite.jmacro.tool.PickRect;
+import xyz.wbsite.jmacro.util.DialogUtil;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
@@ -87,6 +86,23 @@ public class JMainController {
}
}
+ /**
+ * 测量
+ */
+ @FXML
+ public void measure() {
+ ViewRect screen = JMainService.getInstance().getMacro().getFocusRect();
+ if (screen == null) {
+ DialogUtil.alert("未定位到视口,请稍后再试!");
+ return;
+ }
+ try {
+ new Measure(screen.getLeft(), screen.getTop());
+ } catch (AWTException awtException) {
+ awtException.printStackTrace();
+ }
+ }
+
/**
* 运行服务
*/
@@ -110,11 +126,12 @@ public class JMainController {
/**
* 预览
+ *
* @param image
*/
public void preview(Image image) {
try {
- if (!JMainService.getInstance().run){
+ if (!JMainService.getInstance().run) {
return;
}
semaphore.acquire();
diff --git a/src/main/java/com/example/jmacro/wjdr/JMainService.java b/src/main/java/xyz/wbsite/jmacro/JMainService.java
similarity index 93%
rename from src/main/java/com/example/jmacro/wjdr/JMainService.java
rename to src/main/java/xyz/wbsite/jmacro/JMainService.java
index 1265f14..f4b4c5b 100644
--- a/src/main/java/com/example/jmacro/wjdr/JMainService.java
+++ b/src/main/java/xyz/wbsite/jmacro/JMainService.java
@@ -1,10 +1,10 @@
-package com.example.jmacro.wjdr;
+package xyz.wbsite.jmacro;
import cn.hutool.core.thread.ThreadUtil;
-import com.example.jmacro.wjdr.base.Legend;
-import com.example.jmacro.wjdr.wjdr.MacroForWJDR;
-import com.example.jmacro.wjdr.util.DialogUtil;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.base.Legend;
+import xyz.wbsite.jmacro.wjdr.MacroForWJDR;
+import xyz.wbsite.jmacro.util.DialogUtil;
+import xyz.wbsite.jmacro.util.Logger;
import java.io.File;
diff --git a/src/main/java/com/example/jmacro/wjdr/JRoot.java b/src/main/java/xyz/wbsite/jmacro/JRoot.java
similarity index 95%
rename from src/main/java/com/example/jmacro/wjdr/JRoot.java
rename to src/main/java/xyz/wbsite/jmacro/JRoot.java
index d4f216f..c946b40 100644
--- a/src/main/java/com/example/jmacro/wjdr/JRoot.java
+++ b/src/main/java/xyz/wbsite/jmacro/JRoot.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr;
+package xyz.wbsite.jmacro;
import java.awt.*;
diff --git a/src/main/java/com/example/jmacro/wjdr/base/Legend.java b/src/main/java/xyz/wbsite/jmacro/base/Legend.java
similarity index 94%
rename from src/main/java/com/example/jmacro/wjdr/base/Legend.java
rename to src/main/java/xyz/wbsite/jmacro/base/Legend.java
index 6fab3b5..30d93b2 100644
--- a/src/main/java/com/example/jmacro/wjdr/base/Legend.java
+++ b/src/main/java/xyz/wbsite/jmacro/base/Legend.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr.base;
+package xyz.wbsite.jmacro.base;
import cn.hutool.cache.Cache;
import cn.hutool.cache.CacheUtil;
@@ -81,7 +81,7 @@ public class Legend {
List files = FileUtil.loopFiles(defaultBase, pathname -> pathname.getName().startsWith(name));
if (files.size() == 0) {
- throw new RuntimeException("Not found the legend of " + name);
+ throw new RuntimeException(defaultBase.getAbsolutePath() + " not found the legend of " + name);
}
File file = files.get(0);
Legend newLegend = new Legend();
diff --git a/src/main/java/com/example/jmacro/wjdr/base/ViewColor.java b/src/main/java/xyz/wbsite/jmacro/base/ViewColor.java
similarity index 95%
rename from src/main/java/com/example/jmacro/wjdr/base/ViewColor.java
rename to src/main/java/xyz/wbsite/jmacro/base/ViewColor.java
index eb35136..30f8c4d 100644
--- a/src/main/java/com/example/jmacro/wjdr/base/ViewColor.java
+++ b/src/main/java/xyz/wbsite/jmacro/base/ViewColor.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr.base;
+package xyz.wbsite.jmacro.base;
import cn.hutool.core.util.StrUtil;
diff --git a/src/main/java/com/example/jmacro/wjdr/base/ViewPoint.java b/src/main/java/xyz/wbsite/jmacro/base/ViewPoint.java
similarity index 69%
rename from src/main/java/com/example/jmacro/wjdr/base/ViewPoint.java
rename to src/main/java/xyz/wbsite/jmacro/base/ViewPoint.java
index 22988de..65c6dae 100644
--- a/src/main/java/com/example/jmacro/wjdr/base/ViewPoint.java
+++ b/src/main/java/xyz/wbsite/jmacro/base/ViewPoint.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr.base;
+package xyz.wbsite.jmacro.base;
/**
* 可视坐标点
@@ -49,6 +49,18 @@ public class ViewPoint {
this.y = y;
}
+ public ViewPoint offset(int offsetX, int offsetY) {
+ return new ViewPoint(this.x + offsetX, this.y + offsetY);
+ }
+
+ public ViewPoint offsetX(int offsetX) {
+ return new ViewPoint(this.x + offsetX, this.y);
+ }
+
+ public ViewPoint offsetY(int offsetY) {
+ return new ViewPoint(this.x, this.y + offsetY);
+ }
+
@Override
public String toString() {
return "ViewPoint{" +
diff --git a/src/main/java/com/example/jmacro/wjdr/base/ViewRect.java b/src/main/java/xyz/wbsite/jmacro/base/ViewRect.java
similarity index 97%
rename from src/main/java/com/example/jmacro/wjdr/base/ViewRect.java
rename to src/main/java/xyz/wbsite/jmacro/base/ViewRect.java
index 5f18f5b..75c3cb6 100644
--- a/src/main/java/com/example/jmacro/wjdr/base/ViewRect.java
+++ b/src/main/java/xyz/wbsite/jmacro/base/ViewRect.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr.base;
+package xyz.wbsite.jmacro.base;
/**
* 视口区域
diff --git a/src/main/java/xyz/wbsite/jmacro/tool/Measure.java b/src/main/java/xyz/wbsite/jmacro/tool/Measure.java
new file mode 100644
index 0000000..f66428f
--- /dev/null
+++ b/src/main/java/xyz/wbsite/jmacro/tool/Measure.java
@@ -0,0 +1,216 @@
+package xyz.wbsite.jmacro.tool;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.log.StaticLog;
+import xyz.wbsite.jmacro.util.Logger;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
+
+/**
+ * 测量距离
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class Measure extends JFrame {
+
+ /**
+ * 参照原点x坐标
+ */
+ private int originX;
+ /**
+ * 参照原点y坐标
+ */
+ private int originY;
+
+ /**
+ * 全屏幕截图
+ */
+ private BufferedImage capture;
+
+ /**
+ * 背景蒙层
+ */
+ private final Color mask = new Color(0, 0, 0, 0.2f);
+
+ /**
+ * 聚焦框线条
+ */
+ private final Stroke focusWindow = new BasicStroke(1.0f);
+
+ /**
+ * 屏幕截图区域起始坐标
+ */
+ private final Point start = new Point(0, 0);
+
+ /**
+ * 屏幕截图区域结束坐标
+ */
+ private final Point end = new Point(0, 0);
+
+
+ /**
+ * 有参照原点的构造器
+ *
+ * @param originX 原点x
+ * @param originY 原点y
+ * @throws AWTException
+ */
+ public Measure(int originX, int originY) throws AWTException {
+ this();
+ this.originX = originX;
+ this.originY = originY;
+ }
+
+ public Measure() throws AWTException {
+ init();
+ }
+
+ private void init() throws AWTException {
+ setExtendedState(Frame.MAXIMIZED_BOTH);
+ setLocation(0, 0);//位置
+ setUndecorated(true);
+ setAlwaysOnTop(true);
+ setBackground(mask);
+ setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
+
+ // 获取屏幕截图
+ Robot robot = new Robot();
+ Toolkit tk = Toolkit.getDefaultToolkit();
+ capture = robot.createScreenCapture(new Rectangle(0, 0, tk.getScreenSize().width, tk.getScreenSize().height));
+
+ // 监听窗口关闭
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+ // 关闭应用时要释放资源
+ dispose();
+ System.exit(0);//0正常退出,1非正常退出
+ }
+ });
+
+ addMouseListener(new MouseAdapter() {
+ @Override
+ public void mousePressed(MouseEvent e) {
+ super.mousePressed(e);
+ start.setLocation(e.getX(), e.getY());
+ end.setLocation(e.getX(), e.getY());
+ Logger.info("起始坐标:{}", start);
+ repaint();
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ super.mouseReleased(e);
+ end.setLocation(e.getX(), e.getY());
+
+ int left = getCaptureX();
+ int top = getCaptureY();
+ int right = getCaptureX() + getCaptureWidth();
+ int bottom = getCaptureY() + getCaptureHeight();
+ Logger.info("=========================测量距离=========================");
+ Logger.info("水平距离:{}px", getCaptureWidth());
+ Logger.info("垂直距离:{}px", getCaptureHeight());
+
+ Logger.info("用法示例:");
+ Logger.info("1、区域点击:mouseLeftClick(of({},{},{},{}));", left - originX, top - originY, right - originX, bottom - originY);
+
+ Logger.info("=========================测量距离=========================");
+ close();
+ }
+ });
+
+ addMouseMotionListener(new MouseMotionAdapter() {
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ super.mouseDragged(e);
+ end.setLocation(e.getX(), e.getY());
+ repaint();
+ }
+ });
+
+ addKeyListener(new KeyAdapter() {
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ switch (e.getKeyCode()) {
+ case KeyEvent.VK_ESCAPE: {
+ StaticLog.info("exit.");
+ close();
+ }
+ break;
+ }
+
+ }
+ });
+
+ setVisible(true);
+ }
+
+ @Override
+ public void doLayout() {
+ super.doLayout();
+ }
+
+ @Override
+ public void paint(Graphics g) {
+ super.paint(g);
+ Graphics2D g2d = (Graphics2D) g;
+ g2d.drawImage(capture, 0, 0, capture.getWidth(), capture.getHeight(), this);
+
+ // 在背景图上加个蒙层
+ g2d.setColor(mask);
+ g2d.fillRect(0, 0, capture.getWidth(), capture.getHeight());
+
+ int w = getCaptureWidth();
+ int h = getCaptureHeight();
+ if (w > 0 && h > 0) {
+ g2d.setStroke(focusWindow);
+ g2d.setColor(Color.green);
+ g2d.drawRect(getCaptureX(), getCaptureY(), w, h);
+
+ g2d.drawString(StrUtil.format("P({},{})", getCaptureX(), getCaptureY()), getCaptureX() + 5, getCaptureY() + 15);
+ g2d.drawString(StrUtil.format("P({},{})", getCaptureX() + w, getCaptureY() + h), getCaptureX() + w + 5, getCaptureY() + h + 15);
+
+ g2d.drawString(StrUtil.format("{}", w / 2), getCaptureX() + w / 2, getCaptureY() + h - 5);
+ int right = (int) Math.max(start.getX(), end.getX());
+
+ if (right < capture.getWidth() - 30) {
+ g2d.drawString(StrUtil.format("{}", h / 2), getCaptureX() + w + 5, getCaptureY() + h / 2);
+ } else {
+ g2d.drawString(StrUtil.format("{}", h / 2), getCaptureX() + w + 5 - 30, getCaptureY() + h / 2);
+ }
+ }
+ }
+
+ public int getCaptureX() {
+ return (int) Math.min(start.getX(), end.getX());
+ }
+
+ public int getCaptureY() {
+ return (int) Math.min(start.getY(), end.getY());
+ }
+
+ public int getCaptureWidth() {
+ return (int) Math.abs(start.getX() - end.getX());
+ }
+
+ public int getCaptureHeight() {
+ return (int) Math.abs(start.getY() - end.getY());
+ }
+
+ public void close() {
+ setVisible(false);
+ dispose();
+ }
+}
diff --git a/src/main/java/com/example/jmacro/wjdr/tool/PickLegend.java b/src/main/java/xyz/wbsite/jmacro/tool/PickLegend.java
similarity index 94%
rename from src/main/java/com/example/jmacro/wjdr/tool/PickLegend.java
rename to src/main/java/xyz/wbsite/jmacro/tool/PickLegend.java
index 4c62f69..ee432cb 100644
--- a/src/main/java/com/example/jmacro/wjdr/tool/PickLegend.java
+++ b/src/main/java/xyz/wbsite/jmacro/tool/PickLegend.java
@@ -1,12 +1,12 @@
-package com.example.jmacro.wjdr.tool;
+package xyz.wbsite.jmacro.tool;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.log.StaticLog;
-import com.example.jmacro.wjdr.base.Legend;
-import com.example.jmacro.wjdr.util.DialogUtil;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.base.Legend;
+import xyz.wbsite.jmacro.util.DialogUtil;
+import xyz.wbsite.jmacro.util.Logger;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
@@ -252,15 +252,4 @@ public class PickLegend extends JFrame {
setVisible(false);
dispose();
}
-
- /**
- * 工具入口
- *
- * @param args
- * @throws AWTException
- */
- public static void main(String[] args) throws AWTException {
- // 运行坐标图例截图工具
- new PickLegend(5, 5, new File("legend"));
- }
}
diff --git a/src/main/java/com/example/jmacro/wjdr/tool/PickPoint.java b/src/main/java/xyz/wbsite/jmacro/tool/PickPoint.java
similarity index 94%
rename from src/main/java/com/example/jmacro/wjdr/tool/PickPoint.java
rename to src/main/java/xyz/wbsite/jmacro/tool/PickPoint.java
index 854536c..ff96952 100644
--- a/src/main/java/com/example/jmacro/wjdr/tool/PickPoint.java
+++ b/src/main/java/xyz/wbsite/jmacro/tool/PickPoint.java
@@ -1,8 +1,8 @@
-package com.example.jmacro.wjdr.tool;
+package xyz.wbsite.jmacro.tool;
import cn.hutool.core.util.StrUtil;
import cn.hutool.log.StaticLog;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.util.Logger;
import javax.swing.*;
import java.awt.*;
@@ -168,15 +168,4 @@ public class PickPoint extends JFrame {
setVisible(false);
dispose();
}
-
- /**
- * 工具入口
- *
- * @param args
- * @throws AWTException
- */
- public static void main(String[] args) throws AWTException {
- // 运行坐标图例截图工具
- new PickPoint(5, 5);
- }
}
diff --git a/src/main/java/com/example/jmacro/wjdr/tool/PickRect.java b/src/main/java/xyz/wbsite/jmacro/tool/PickRect.java
similarity index 94%
rename from src/main/java/com/example/jmacro/wjdr/tool/PickRect.java
rename to src/main/java/xyz/wbsite/jmacro/tool/PickRect.java
index 67885ae..ca2b59e 100644
--- a/src/main/java/com/example/jmacro/wjdr/tool/PickRect.java
+++ b/src/main/java/xyz/wbsite/jmacro/tool/PickRect.java
@@ -1,7 +1,7 @@
-package com.example.jmacro.wjdr.tool;
+package xyz.wbsite.jmacro.tool;
import cn.hutool.log.StaticLog;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.util.Logger;
import javax.swing.*;
import java.awt.*;
@@ -201,15 +201,4 @@ public class PickRect extends JFrame {
setVisible(false);
dispose();
}
-
- /**
- * 工具入口
- *
- * @param args
- * @throws AWTException
- */
- public static void main(String[] args) throws AWTException {
- // 运行坐标图例截图工具
- new PickRect(5, 5);
- }
}
diff --git a/src/main/java/com/example/jmacro/wjdr/ui/FXMLUtil.java b/src/main/java/xyz/wbsite/jmacro/ui/FXMLUtil.java
similarity index 87%
rename from src/main/java/com/example/jmacro/wjdr/ui/FXMLUtil.java
rename to src/main/java/xyz/wbsite/jmacro/ui/FXMLUtil.java
index 0a5f3a3..1c733ae 100644
--- a/src/main/java/com/example/jmacro/wjdr/ui/FXMLUtil.java
+++ b/src/main/java/xyz/wbsite/jmacro/ui/FXMLUtil.java
@@ -1,6 +1,6 @@
-package com.example.jmacro.wjdr.ui;
+package xyz.wbsite.jmacro.ui;
-import com.example.jmacro.wjdr.util.ResourceUtil;
+import xyz.wbsite.jmacro.util.ResourceUtil;
import javafx.fxml.FXMLLoader;
import java.io.IOException;
diff --git a/src/main/java/com/example/jmacro/wjdr/util/ColorUtil.java b/src/main/java/xyz/wbsite/jmacro/util/ColorUtil.java
similarity index 97%
rename from src/main/java/com/example/jmacro/wjdr/util/ColorUtil.java
rename to src/main/java/xyz/wbsite/jmacro/util/ColorUtil.java
index 9036c20..4f91dc1 100644
--- a/src/main/java/com/example/jmacro/wjdr/util/ColorUtil.java
+++ b/src/main/java/xyz/wbsite/jmacro/util/ColorUtil.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr.util;
+package xyz.wbsite.jmacro.util;
/**
* 颜色比对工具
diff --git a/src/main/java/com/example/jmacro/wjdr/util/DialogUtil.java b/src/main/java/xyz/wbsite/jmacro/util/DialogUtil.java
similarity index 99%
rename from src/main/java/com/example/jmacro/wjdr/util/DialogUtil.java
rename to src/main/java/xyz/wbsite/jmacro/util/DialogUtil.java
index be1e627..488af1c 100644
--- a/src/main/java/com/example/jmacro/wjdr/util/DialogUtil.java
+++ b/src/main/java/xyz/wbsite/jmacro/util/DialogUtil.java
@@ -1,7 +1,7 @@
-package com.example.jmacro.wjdr.util;
+package xyz.wbsite.jmacro.util;
import cn.hutool.core.util.ClassUtil;
-import com.example.jmacro.wjdr.JMainApplication;
+import xyz.wbsite.jmacro.JMainApplication;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Platform;
diff --git a/src/main/java/com/example/jmacro/wjdr/util/ImageUtil.java b/src/main/java/xyz/wbsite/jmacro/util/ImageUtil.java
similarity index 96%
rename from src/main/java/com/example/jmacro/wjdr/util/ImageUtil.java
rename to src/main/java/xyz/wbsite/jmacro/util/ImageUtil.java
index 4b0a169..558c5ab 100644
--- a/src/main/java/com/example/jmacro/wjdr/util/ImageUtil.java
+++ b/src/main/java/xyz/wbsite/jmacro/util/ImageUtil.java
@@ -1,9 +1,9 @@
-package com.example.jmacro.wjdr.util;
+package xyz.wbsite.jmacro.util;
import cn.hutool.core.img.ImgUtil;
-import com.example.jmacro.wjdr.JMainApplication;
-import com.example.jmacro.wjdr.JMainService;
-import com.example.jmacro.wjdr.base.ViewRect;
+import xyz.wbsite.jmacro.JMainApplication;
+import xyz.wbsite.jmacro.JMainService;
+import xyz.wbsite.jmacro.base.ViewRect;
import java.awt.*;
import java.awt.image.BufferedImage;
diff --git a/src/main/java/com/example/jmacro/wjdr/util/Logger.java b/src/main/java/xyz/wbsite/jmacro/util/Logger.java
similarity index 95%
rename from src/main/java/com/example/jmacro/wjdr/util/Logger.java
rename to src/main/java/xyz/wbsite/jmacro/util/Logger.java
index af7ae4f..d0a72f0 100644
--- a/src/main/java/com/example/jmacro/wjdr/util/Logger.java
+++ b/src/main/java/xyz/wbsite/jmacro/util/Logger.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr.util;
+package xyz.wbsite.jmacro.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
diff --git a/src/main/java/com/example/jmacro/wjdr/util/ResourceUtil.java b/src/main/java/xyz/wbsite/jmacro/util/ResourceUtil.java
similarity index 98%
rename from src/main/java/com/example/jmacro/wjdr/util/ResourceUtil.java
rename to src/main/java/xyz/wbsite/jmacro/util/ResourceUtil.java
index b0a7965..baa1b94 100644
--- a/src/main/java/com/example/jmacro/wjdr/util/ResourceUtil.java
+++ b/src/main/java/xyz/wbsite/jmacro/util/ResourceUtil.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr.util;
+package xyz.wbsite.jmacro.util;
import cn.hutool.core.io.resource.ClassPathResource;
import javafx.fxml.FXMLLoader;
diff --git a/src/main/java/com/example/jmacro/wjdr/util/TaskUtil.java b/src/main/java/xyz/wbsite/jmacro/util/TaskUtil.java
similarity index 99%
rename from src/main/java/com/example/jmacro/wjdr/util/TaskUtil.java
rename to src/main/java/xyz/wbsite/jmacro/util/TaskUtil.java
index 1cf5795..af4b1af 100644
--- a/src/main/java/com/example/jmacro/wjdr/util/TaskUtil.java
+++ b/src/main/java/xyz/wbsite/jmacro/util/TaskUtil.java
@@ -1,4 +1,4 @@
-package com.example.jmacro.wjdr.util;
+package xyz.wbsite.jmacro.util;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.thread.ThreadUtil;
diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/MacroForWJDR.java b/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java
similarity index 89%
rename from src/main/java/com/example/jmacro/wjdr/wjdr/MacroForWJDR.java
rename to src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java
index 3fd56a1..6f0670c 100644
--- a/src/main/java/com/example/jmacro/wjdr/wjdr/MacroForWJDR.java
+++ b/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java
@@ -1,16 +1,19 @@
-package com.example.jmacro.wjdr.wjdr;
+package xyz.wbsite.jmacro.wjdr;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
-import com.example.jmacro.wjdr.JMacro;
-import com.example.jmacro.wjdr.JMainService;
-import com.example.jmacro.wjdr.base.Legend;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.util.Logger;
-import com.example.jmacro.wjdr.util.TaskUtil;
-import com.example.jmacro.wjdr.wjdr.task.*;
-
-import java.util.concurrent.Callable;
+import xyz.wbsite.jmacro.JMacro;
+import xyz.wbsite.jmacro.JMainService;
+import xyz.wbsite.jmacro.base.Legend;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.util.Logger;
+import xyz.wbsite.jmacro.util.TaskUtil;
+import xyz.wbsite.jmacro.wjdr.task.Task_探险领取;
+import xyz.wbsite.jmacro.wjdr.task.Task_收留避难者;
+import xyz.wbsite.jmacro.wjdr.task.Task_离线收益;
+import xyz.wbsite.jmacro.wjdr.task.Task_自动采矿;
+import xyz.wbsite.jmacro.wjdr.task.Task_采矿被攻击;
+
import java.util.concurrent.TimeUnit;
/**
diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/task/BaseTask.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/BaseTask.java
similarity index 82%
rename from src/main/java/com/example/jmacro/wjdr/wjdr/task/BaseTask.java
rename to src/main/java/xyz/wbsite/jmacro/wjdr/task/BaseTask.java
index 934c6a6..60e5064 100644
--- a/src/main/java/com/example/jmacro/wjdr/wjdr/task/BaseTask.java
+++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/BaseTask.java
@@ -1,9 +1,9 @@
-package com.example.jmacro.wjdr.wjdr.task;
+package xyz.wbsite.jmacro.wjdr.task;
-import com.example.jmacro.wjdr.JMacro;
-import com.example.jmacro.wjdr.JMainService;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.JMacro;
+import xyz.wbsite.jmacro.JMainService;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.util.Logger;
/**
* 基础任务类
diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_探险领取.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_探险领取.java
similarity index 93%
rename from src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_探险领取.java
rename to src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_探险领取.java
index e3f9a04..677f300 100644
--- a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_探险领取.java
+++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_探险领取.java
@@ -1,8 +1,8 @@
-package com.example.jmacro.wjdr.wjdr.task;
+package xyz.wbsite.jmacro.wjdr.task;
-import com.example.jmacro.wjdr.JMacro;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.JMacro;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.util.Logger;
public class Task_探险领取 extends BaseTask {
diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_收留避难者.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_收留避难者.java
similarity index 84%
rename from src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_收留避难者.java
rename to src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_收留避难者.java
index 713096d..c859281 100644
--- a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_收留避难者.java
+++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_收留避难者.java
@@ -1,8 +1,8 @@
-package com.example.jmacro.wjdr.wjdr.task;
+package xyz.wbsite.jmacro.wjdr.task;
-import com.example.jmacro.wjdr.JMacro;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.JMacro;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.util.Logger;
public class Task_收留避难者 extends BaseTask {
diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_离线收益.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_离线收益.java
similarity index 79%
rename from src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_离线收益.java
rename to src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_离线收益.java
index ce6c92a..716866e 100644
--- a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_离线收益.java
+++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_离线收益.java
@@ -1,8 +1,8 @@
-package com.example.jmacro.wjdr.wjdr.task;
+package xyz.wbsite.jmacro.wjdr.task;
-import com.example.jmacro.wjdr.JMacro;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.JMacro;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.util.Logger;
public class Task_离线收益 extends BaseTask {
diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_自动采矿.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动采矿.java
similarity index 95%
rename from src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_自动采矿.java
rename to src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动采矿.java
index 724deec..c8ed328 100644
--- a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_自动采矿.java
+++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动采矿.java
@@ -1,11 +1,10 @@
-package com.example.jmacro.wjdr.wjdr.task;
+package xyz.wbsite.jmacro.wjdr.task;
import cn.hutool.json.JSONUtil;
-import com.example.jmacro.wjdr.JMacro;
-import com.example.jmacro.wjdr.base.ViewPoint;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.util.Logger;
-import com.example.jmacro.wjdr.util.TaskUtil;
+import xyz.wbsite.jmacro.JMacro;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.util.Logger;
+import xyz.wbsite.jmacro.util.TaskUtil;
public class Task_自动采矿 extends BaseTask {
diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_采矿被攻击.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_采矿被攻击.java
similarity index 61%
rename from src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_采矿被攻击.java
rename to src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_采矿被攻击.java
index 990d1c5..540792a 100644
--- a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_采矿被攻击.java
+++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_采矿被攻击.java
@@ -1,8 +1,8 @@
-package com.example.jmacro.wjdr.wjdr.task;
+package xyz.wbsite.jmacro.wjdr.task;
-import com.example.jmacro.wjdr.JMacro;
-import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.util.Logger;
+import xyz.wbsite.jmacro.JMacro;
+import xyz.wbsite.jmacro.base.ViewRect;
+import xyz.wbsite.jmacro.util.Logger;
public class Task_采矿被攻击 extends BaseTask {
diff --git a/src/main/resources/icon.ico b/src/main/resources/icon.ico
new file mode 100644
index 0000000..061bb64
Binary files /dev/null and b/src/main/resources/icon.ico differ
diff --git a/src/main/resources/main.fxml b/src/main/resources/main.fxml
index 45481f6..3258cbd 100644
--- a/src/main/resources/main.fxml
+++ b/src/main/resources/main.fxml
@@ -5,7 +5,7 @@
-
+
@@ -32,15 +32,20 @@
-
-