From b3324514817a1fcd08fbc19d1ba8fa22183bd9ce Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sat, 17 Jan 2026 17:58:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9Main=E7=B1=BB=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E7=A9=BA=E9=97=B4=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ bash/build_class.sh | 5 ----- bash/start_winboll_in_termux_alllog.sh | 2 +- bash/start_winboll_in_termux_infolog.sh | 2 +- src/{cc/winboll => }/Main.java | 25 ++++++---------------- src/cc/winboll/util/ConsoleInputUtils.java | 17 +++++++-------- src/cc/winboll/util/MainUtils.java | 11 ++++++++++ 7 files changed, 31 insertions(+), 34 deletions(-) rename src/{cc/winboll => }/Main.java (94%) diff --git a/README.md b/README.md index 8cb680a..18135dc 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,9 @@ java -cp "runtime:libs/*" cc.winboll.Main -v -log:ALL # 仅输出错误日志 java -cp "runtime:libs/*" cc.winboll.Main -v -log:SEVERE +1Panel Java 环境启动 +java -cp "/sdcard/WinBoLLStudio/Sources/AuthCenterConsoleApp/runtime:/sdcard/WinBoLLStudio/Sources/AuthCenterConsoleApp/libs/*" cc.winboll.Main -v -log:ALL + ## 程序内使用技巧 // 1. 服务启动时发送通知 diff --git a/bash/build_class.sh b/bash/build_class.sh index 69ec16b..349f918 100644 --- a/bash/build_class.sh +++ b/bash/build_class.sh @@ -75,8 +75,3 @@ if [ $? -ne 0 ]; then exit 1 fi echo -e "\n✅ 编译成功!" - -# 5. 启动程序(全日志输出到logs目录) -echo "------------------------------------------------------------------------" -echo "🚀 启动程序...日志输出至 ${LOG_DIR}/winboll_all.log" -java -cp "${OUT_DIR}:${LIB_DIR}/*" ${MAIN_CLASS} > "${LOG_DIR}/winboll_all.log" 2>&1 diff --git a/bash/start_winboll_in_termux_alllog.sh b/bash/start_winboll_in_termux_alllog.sh index 5af6cb1..3dd37e3 100644 --- a/bash/start_winboll_in_termux_alllog.sh +++ b/bash/start_winboll_in_termux_alllog.sh @@ -24,7 +24,7 @@ echo "✅ 编译校验通过" # 3. 类路径+主类配置(核心修正:主类用完整包名,适配目录结构) CLASSPATH="$BASE_DIR/runtime" [ -d "$BASE_DIR/libs" ] && CLASSPATH="$CLASSPATH:$BASE_DIR/libs/*" -MAIN_CLASS="cc.winboll.Main" +MAIN_CLASS="Main" # 4. JVM优化配置(适配Termux低内存环境) export _JAVA_OPTIONS="-Xmx128m -Xms64m -Dfile.encoding=UTF-8" diff --git a/bash/start_winboll_in_termux_infolog.sh b/bash/start_winboll_in_termux_infolog.sh index 3b69927..8546a34 100644 --- a/bash/start_winboll_in_termux_infolog.sh +++ b/bash/start_winboll_in_termux_infolog.sh @@ -24,7 +24,7 @@ echo "✅ 编译校验通过" # 3. 类路径+主类配置(核心修正:主类用完整包名,适配目录结构) CLASSPATH="$BASE_DIR/runtime" [ -d "$BASE_DIR/libs" ] && CLASSPATH="$CLASSPATH:$BASE_DIR/libs/*" -MAIN_CLASS="cc.winboll.Main" +MAIN_CLASS="Main" # 4. JVM优化配置(适配Termux低内存环境) export _JAVA_OPTIONS="-Xmx128m -Xms64m -Dfile.encoding=UTF-8" diff --git a/src/cc/winboll/Main.java b/src/Main.java similarity index 94% rename from src/cc/winboll/Main.java rename to src/Main.java index 082ad5a..64669c7 100644 --- a/src/cc/winboll/Main.java +++ b/src/Main.java @@ -1,5 +1,3 @@ -package cc.winboll; - import cc.winboll.LogUtils; import cc.winboll.service.AuthCenterHttpService; import cc.winboll.util.AdminUtils; @@ -33,12 +31,11 @@ public class Main { private static final String CONFIG_KEY_ROOT_DIR = "PROJECT_ROOT_DIR"; private static AuthCenterHttpService httpService; private static int httpPort; - private static volatile boolean isExit = false; - + // ========== 程序入口方法 ========== public static void main(String[] args) { LogUtils.d(TAG, "【函数调用】main(),AuthCenter程序启动,开始执行初始化流程"); - isExit = false; + MainUtils.setExit(false); // 解析启动参数 + 加载INI根配置 MainUtils.parseArgs(args); @@ -81,7 +78,7 @@ public class Main { boolean initCheckPass = InitCheckUtils.checkAllInitConfig(); if (!initCheckPass) { LogUtils.e(TAG, "初始化校验未通过,程序退出"); - isExit = true; + MainUtils.setExit(true); System.exit(1); } @@ -133,7 +130,7 @@ public class Main { String errMsg = "HTTP服务启动失败!端口 " + httpPort + " 可能被占用"; System.err.println(errMsg); LogUtils.e(TAG, "【函数异常】startAuthCenterHttpService(),HTTP服务启动失败", e); - isExit = true; + MainUtils.setExit(true); ConsoleInputUtils.forceExit(); ConsoleInputUtils.closeConsoleScanner(); MainUtils.releaseAllResources(httpService); @@ -156,11 +153,11 @@ public class Main { }, "GracefulStop-Hook")); System.out.println("\n服务已常驻运行,输入exit可退出服务,或执行kill 对应Java进程号停机"); - while (!isExit) { + while (!MainUtils.isExit()) { try { boolean needExit = ConsoleInputUtils.checkConsoleCommand(); if (needExit) { - isExit = true; + MainUtils.setExit(true); LogUtils.i(TAG, "检测到exit指令,触发服务正常停机流程"); System.exit(0); break; @@ -168,7 +165,7 @@ public class Main { Thread.sleep(50); } catch (InterruptedException e) { LogUtils.w(TAG, "控制台监听线程被中断,触发退出"); - isExit = true; + MainUtils.setExit(true); LogUtils.e(TAG, "【退出详情】监听线程中断,退出状态码:200(线程异常中断)"); System.exit(200); } @@ -176,13 +173,5 @@ public class Main { LogUtils.d(TAG, "【函数结束】consoleBlockForService(),常驻阻塞流程退出"); } - // ========== 对外暴露方法 ========== - public static boolean isExit() { - return isExit; - } - - public static void setExit(boolean exit) { - isExit = exit; - } } diff --git a/src/cc/winboll/util/ConsoleInputUtils.java b/src/cc/winboll/util/ConsoleInputUtils.java index 547ce14..8565aba 100644 --- a/src/cc/winboll/util/ConsoleInputUtils.java +++ b/src/cc/winboll/util/ConsoleInputUtils.java @@ -1,7 +1,6 @@ package cc.winboll.util; import cc.winboll.LogUtils; -import cc.winboll.Main; import cc.winboll.auth.MailAuthUtils; import cc.winboll.service.AuthCenterHttpService; import java.util.Scanner; @@ -74,12 +73,12 @@ public class ConsoleInputUtils { */ public static boolean checkConsoleCommand() { // 优先判断全局退出状态:isExit=true 直接返回退出 - if (Main.isExit()) { + if (MainUtils.isExit()) { return true; } if (!isScannerInit || scanner == null) { LogUtils.w(TAG, "【指令检查】扫描器未初始化,无法监听输入"); - return Main.isExit(); + return MainUtils.isExit(); } try { @@ -123,13 +122,13 @@ public class ConsoleInputUtils { } } catch (IllegalStateException e) { LogUtils.w(TAG, "【指令检查】扫描器已关闭,停止输入监听", e); - Main.setExit(true); // 标记需要退出 + MainUtils.setExit(true); // 标记需要退出 } catch (Exception e) { LogUtils.e(TAG, "【指令检查】输入监听异常,终止服务", e); - Main.setExit(true); // 标记需要退出 + MainUtils.setExit(true); // 标记需要退出 } // 返回全局退出状态,与方法语义完全匹配 - return Main.isExit(); + return MainUtils.isExit(); } /** @@ -177,7 +176,7 @@ public class ConsoleInputUtils { LogUtils.i(TAG, "HTTP服务已通过优雅停止流程关闭"); } LogUtils.d(TAG, "【指令处理】执行exit指令,标记服务退出状态"); - Main.setExit(true); + MainUtils.setExit(true); System.out.println("\n📢 已接收退出指令,正在执行优雅停止服务..."); System.out.flush(); // 新增日志:验证方法执行到末尾 @@ -241,7 +240,7 @@ public class ConsoleInputUtils { private static void handleStatusCmd() { LogUtils.d(TAG, "【指令处理】执行status指令,查询服务当前状态"); System.out.println("\n📊 AuthCenter 服务状态信息:"); - System.out.println(" 运行状态:" + (Main.isExit() ? "❌ 已停止" : "✅ 运行中")); + System.out.println(" 运行状态:" + (MainUtils.isExit() ? "❌ 已停止" : "✅ 运行中")); System.out.println(" HTTP服务端口:" + MainUtils.getHttpPortFromConfig()); System.out.println(" 日志级别:" + LogUtils.getGlobalLogLevel().getName()); System.out.println(" 服务器地址:" + ServerUtils.getServerUrl()); @@ -351,7 +350,7 @@ public class ConsoleInputUtils { */ public static void forceExit() { LogUtils.w(TAG, "【紧急处理】执行强制退出流程"); - Main.setExit(true); + MainUtils.setExit(true); closeConsoleScanner(); } } diff --git a/src/cc/winboll/util/MainUtils.java b/src/cc/winboll/util/MainUtils.java index d97261f..c898e55 100644 --- a/src/cc/winboll/util/MainUtils.java +++ b/src/cc/winboll/util/MainUtils.java @@ -22,6 +22,8 @@ public class MainUtils { public static final String ARG_DETAIL = "detail"; public static final String ARG_LOG_LEVEL = "log"; public static final String ARG_SERVER_URL = "serverUrl"; + private static volatile boolean isExit = false; + // 新增:-v 参数常量,控制终端同步输出日志 public static final String ARG_VERBOSE = "v"; @@ -260,5 +262,14 @@ public class MainUtils { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(new Date()); } + + // ========== 对外暴露方法 ========== + public static boolean isExit() { + return isExit; + } + + public static void setExit(boolean exit) { + isExit = exit; + } }