From 04961abb426798660e6e90d250119c74efd9c680 Mon Sep 17 00:00:00 2001 From: wangbing Date: Mon, 27 Oct 2025 17:47:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/xyz/wbsite/jmacro/JMacro.java | 32 ++++++++++++------- .../java/xyz/wbsite/jmacro/base/Legend.java | 2 +- .../java/xyz/wbsite/jmacro/util/DateUtil.java | 17 ++++++++++ 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/main/java/xyz/wbsite/jmacro/JMacro.java b/src/main/java/xyz/wbsite/jmacro/JMacro.java index dcaac89..b20b1c6 100644 --- a/src/main/java/xyz/wbsite/jmacro/JMacro.java +++ b/src/main/java/xyz/wbsite/jmacro/JMacro.java @@ -444,7 +444,6 @@ public abstract class JMacro { }, timeout, TimeUnit.SECONDS); } - /** * 图例组合匹配,图例区域结果和入参长度一致,任意图例检测到后则会返回,其他未检测到的区域则为null *

@@ -501,6 +500,26 @@ public abstract class JMacro { return result; } + /** + * 等待并查找图例,发现任意一个即返回 + *

+ * 通常用于同样的图例但是在不通版本上有细微区别的情况(增加不通版本的兼容处理) + * + * @param legends 图例组 + * @param minSimilar 最低相似度 + * @param seconds 最长等待秒数 + * @return 匹配区域 + */ + public Region waitAndFindAny(String[] legends, double minSimilar, long seconds) { + Region[] result = waitAndFindLegends(legends, minSimilar, seconds); + for (Region viewRect : result) { + if (viewRect != null) { + return viewRect; + } + } + return null; + } + /** * 查找并点击图例 * @@ -528,17 +547,6 @@ public abstract class JMacro { return Legend.inflate(legend); } - /** - * 将相对坐标转为绝对坐标 - * - * @return 绝对坐标 - */ - public Location of(int x, int y) { - int ox = getWorkRegion().getX(); - int oy = getWorkRegion().getY(); - return new Location(x + ox, y + oy); - } - /** * 将相对坐标转为色值坐标 * diff --git a/src/main/java/xyz/wbsite/jmacro/base/Legend.java b/src/main/java/xyz/wbsite/jmacro/base/Legend.java index 8dc629e..1673433 100644 --- a/src/main/java/xyz/wbsite/jmacro/base/Legend.java +++ b/src/main/java/xyz/wbsite/jmacro/base/Legend.java @@ -69,7 +69,7 @@ public class Legend { } List files = FileUtil.loopFiles(defaultBase, pathname -> pathname.getName().startsWith(name)); - if (files.size() == 0) { + if (files.isEmpty()) { Logger.info(defaultBase.getAbsolutePath() + " not found the legend of " + name); throw new RuntimeException(defaultBase.getAbsolutePath() + " not found the legend of " + name); } diff --git a/src/main/java/xyz/wbsite/jmacro/util/DateUtil.java b/src/main/java/xyz/wbsite/jmacro/util/DateUtil.java index d5bb9c1..70ef0f1 100644 --- a/src/main/java/xyz/wbsite/jmacro/util/DateUtil.java +++ b/src/main/java/xyz/wbsite/jmacro/util/DateUtil.java @@ -64,6 +64,8 @@ public class DateUtil extends cn.hutool.core.date.DateUtil { * @return 是否在基准时间之后 */ public static boolean isTimeAfter(String baseTime, String time) { + checkTimeFormat(baseTime); + checkTimeFormat(time); return baseTime.compareTo(time) < 0; } @@ -96,6 +98,21 @@ public class DateUtil extends cn.hutool.core.date.DateUtil { * @return 是否在基准时间之前 */ public static boolean isTimeBefore(String baseTime, String time) { + checkTimeFormat(baseTime); + checkTimeFormat(time); return baseTime.compareTo(time) > 0; } + + /** + * 检查时间格式是否为 HH:mm:ss + * + * @param times 时间字符串数组 + */ + private static void checkTimeFormat(String... times) { + for (String time : times) { + if (!time.matches("\\d{2}:\\d{2}:\\d{2}")) { + throw new IllegalArgumentException(time + " > 时间格式必须为 HH:mm:ss"); + } + } + } } \ No newline at end of file