From c4a10214dbc4639aba333e2be86590f229af1877 Mon Sep 17 00:00:00 2001
From: tzdwindows 7 <3076584115@qq.com>
Date: Fri, 2 May 2025 19:11:25 +0800
Subject: [PATCH] =?UTF-8?q?feat(core):=20=E6=B7=BB=E5=8A=A0=E9=AB=98?=
=?UTF-8?q?=E7=BA=A7=E6=96=87=E4=BB=B6=E9=80=89=E6=8B=A9=E5=99=A8=E5=92=8C?=
=?UTF-8?q?=E6=9A=97=E9=BB=91=E4=B8=BB=E9=A2=98=E8=81=8A=E5=A4=A9=E7=95=8C?=
=?UTF-8?q?=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 AdvancedJFileChooser 类,实现记住上次访问目录的功能
- 添加 AIaToolbox_dark.html 文件,实现暗黑主题的聊天界面- 优化代码结构,提高可读性和可维护性
---
build.gradle | 10 +
javascript/AIaToolbox_dark.html | 867 ++++++++++
javascript/AIaToolbox_light.html | 665 ++++++++
javascript/HtmlViewer.html | 462 ++++++
language/saved_language.properties | 2 +-
.../innovators/box/AxisInnovatorsBox.java | 4 +
.../java/com/axis/innovators/box/Main.java | 10 +-
.../innovators/box/browser/CefAppManager.java | 1 +
.../box/browser/MainApplication.java | 109 +-
.../gui/JavaPseudocodeGenerator.java | 339 ++++
.../decompilation/gui/ModernJarViewer.java | 4 +-
.../gui/TypeMismatchException.java | 7 +
.../axis/innovators/box/gui/FridaWindow.java | 5 +-
.../box/gui/JarApiProfilingWindow.java | 1469 +++++++++++++++++
.../axis/innovators/box/gui/MainWindow.java | 46 +-
.../box/register/RegistrationTool.java | 16 +
.../innovators/box/tools/FolderCreator.java | 10 +
.../innovators/box/tools/RegisterTray.java | 233 +++
.../box/util/AdvancedJFileChooser.java | 67 +
.../org/editing/CodeEditingComponent.java | 7 +
src/main/java/org/editing/Main.java | 9 +
src/main/resources/icons/class.png | Bin 0 -> 15834 bytes
src/main/resources/icons/export.png | Bin 0 -> 6691 bytes
src/main/resources/icons/import.png | Bin 0 -> 15072 bytes
src/main/resources/icons/logo.ico | Bin 0 -> 4286 bytes
src/main/resources/icons/method.png | Bin 0 -> 8965 bytes
src/main/resources/icons/package.png | Bin 0 -> 3634 bytes
.../JarApiViewer/JarApi_Viewer.png | Bin 0 -> 8073 bytes
.../icons/programming/programming.png | Bin 0 -> 8245 bytes
src/main/resources/icons/search.png | Bin 0 -> 8171 bytes
src/main/resources/javascript/HtmlViewer.html | 462 ++++++
31 files changed, 4726 insertions(+), 78 deletions(-)
create mode 100644 javascript/AIaToolbox_dark.html
create mode 100644 javascript/AIaToolbox_light.html
create mode 100644 javascript/HtmlViewer.html
create mode 100644 src/main/java/com/axis/innovators/box/decompilation/gui/JavaPseudocodeGenerator.java
create mode 100644 src/main/java/com/axis/innovators/box/decompilation/gui/TypeMismatchException.java
create mode 100644 src/main/java/com/axis/innovators/box/gui/JarApiProfilingWindow.java
create mode 100644 src/main/java/com/axis/innovators/box/tools/RegisterTray.java
create mode 100644 src/main/java/com/axis/innovators/box/util/AdvancedJFileChooser.java
create mode 100644 src/main/java/org/editing/CodeEditingComponent.java
create mode 100644 src/main/java/org/editing/Main.java
create mode 100644 src/main/resources/icons/class.png
create mode 100644 src/main/resources/icons/export.png
create mode 100644 src/main/resources/icons/import.png
create mode 100644 src/main/resources/icons/logo.ico
create mode 100644 src/main/resources/icons/method.png
create mode 100644 src/main/resources/icons/package.png
create mode 100644 src/main/resources/icons/programming/JarApiViewer/JarApi_Viewer.png
create mode 100644 src/main/resources/icons/programming/programming.png
create mode 100644 src/main/resources/icons/search.png
create mode 100644 src/main/resources/javascript/HtmlViewer.html
diff --git a/build.gradle b/build.gradle
index 4697214..e7e3a11 100644
--- a/build.gradle
+++ b/build.gradle
@@ -145,6 +145,16 @@ dependencies {
implementation 'jflac:jflac:1.3' // FLAC支持
implementation 'com.github.axet:TarsosDSP:2.4'
+
+ // Eclipse 组件
+ // https://mvnrepository.com/artifact/org.eclipse.swt/org.eclipse.swt.win32.win32.x86_64
+ //implementation 'org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64:4.3'
+ //
+ //// 基础 Eclipse 组件
+ //implementation 'org.eclipse.platform:org.eclipse.jface:3.36.0'
+ //implementation 'org.eclipse.platform:org.eclipse.jface.text:3.27.0' // 使用兼容版本
+ //implementation 'org.eclipse.platform:org.eclipse.core.runtime:3.33.0'
+ //implementation 'org.eclipse.platform:org.eclipse.equinox.common:3.20.0'
}
// 分离依赖项到 libs 目录
diff --git a/javascript/AIaToolbox_dark.html b/javascript/AIaToolbox_dark.html
new file mode 100644
index 0000000..b4f28ec
--- /dev/null
+++ b/javascript/AIaToolbox_dark.html
@@ -0,0 +1,867 @@
+
+
+
+
+
+ DeepSeek - 智能助手
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/javascript/AIaToolbox_light.html b/javascript/AIaToolbox_light.html
new file mode 100644
index 0000000..9d5ed0e
--- /dev/null
+++ b/javascript/AIaToolbox_light.html
@@ -0,0 +1,665 @@
+
+
+
+
+
+ DeepSeek - 智能助手
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/javascript/HtmlViewer.html b/javascript/HtmlViewer.html
new file mode 100644
index 0000000..6ffb8a0
--- /dev/null
+++ b/javascript/HtmlViewer.html
@@ -0,0 +1,462 @@
+
+
+
+
+ Axis Innovators Pro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/language/saved_language.properties b/language/saved_language.properties
index 90c8a26..c155509 100644
--- a/language/saved_language.properties
+++ b/language/saved_language.properties
@@ -1,3 +1,3 @@
#Current Loaded Language
-#Sun Mar 02 19:35:49 CST 2025
+#Thu May 01 15:04:30 CST 2025
loadedLanguage=system\:zh_CN
diff --git a/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java b/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java
index f106032..7739d30 100644
--- a/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java
+++ b/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java
@@ -319,6 +319,10 @@ public class AxisInnovatorsBox {
windowsJDialog.repaint();
}
+ //public void execute(Runnable runnable){
+ // thread.
+ //}
+
/**
* 重新加载窗口
*/
diff --git a/src/main/java/com/axis/innovators/box/Main.java b/src/main/java/com/axis/innovators/box/Main.java
index 24f02cd..de6caa9 100644
--- a/src/main/java/com/axis/innovators/box/Main.java
+++ b/src/main/java/com/axis/innovators/box/Main.java
@@ -1,16 +1,13 @@
package com.axis.innovators.box;
+import com.axis.innovators.box.browser.MainApplication;
import com.axis.innovators.box.decompilation.gui.ModernJarViewer;
-import com.axis.innovators.box.events.GlobalEventBus;
-import com.axis.innovators.box.events.OpenFileEvents;
-import com.axis.innovators.box.gui.LoginWindow;
import com.axis.innovators.box.tools.ArgsParser;
import com.axis.innovators.box.tools.FolderCleaner;
import com.axis.innovators.box.tools.FolderCreator;
import com.axis.innovators.box.register.LanguageManager;
import javax.swing.*;
-import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -42,6 +39,11 @@ public class Main {
});
return;
}
+
+ if (".html".equals(extension)){
+ MainApplication.popupHTMLWindow(path);
+ return;
+ }
}
AxisInnovatorsBox.run(args);
diff --git a/src/main/java/com/axis/innovators/box/browser/CefAppManager.java b/src/main/java/com/axis/innovators/box/browser/CefAppManager.java
index 5bc7dd0..069bb94 100644
--- a/src/main/java/com/axis/innovators/box/browser/CefAppManager.java
+++ b/src/main/java/com/axis/innovators/box/browser/CefAppManager.java
@@ -56,6 +56,7 @@ public class CefAppManager {
private static void disposeCefApp() {
if (cefApp != null) {
+ cefApp.clearSchemeHandlerFactories();
cefApp.dispose();
cefApp = null;
isInitialized = false;
diff --git a/src/main/java/com/axis/innovators/box/browser/MainApplication.java b/src/main/java/com/axis/innovators/box/browser/MainApplication.java
index 2a4fe7a..b317bda 100644
--- a/src/main/java/com/axis/innovators/box/browser/MainApplication.java
+++ b/src/main/java/com/axis/innovators/box/browser/MainApplication.java
@@ -1,5 +1,8 @@
package com.axis.innovators.box.browser;
+import com.axis.innovators.box.tools.FolderCreator;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.browser.CefMessageRouter;
@@ -8,9 +11,13 @@ import org.cef.handler.CefMessageRouterHandlerAdapter;
import org.tzd.lm.LM;
import javax.swing.*;
+import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
@@ -27,46 +34,7 @@ public class MainApplication {
private static long ctxHandle;
private static boolean isSystem = true;
public static void main(String[] args) {
- LM.loadLibrary(LM.CUDA);
- modelHandle = LM.llamaLoadModelFromFile(LM.DEEP_SEEK);
- ctxHandle = LM.createContext(modelHandle);
-
- AtomicReference window = new AtomicReference<>();
- SwingUtilities.invokeLater(() -> {
- WindowRegistry.getInstance().createNewChildWindow("main", builder ->
- window.set(builder.title("Axis Innovators Box AI 工具箱")
- .icon(new ImageIcon(Objects.requireNonNull(MainApplication.class.getClassLoader().getResource("icons/logo.png"))).getImage())
- .size(1280, 720)
- .htmlPath(Objects.requireNonNull(MainApplication.class.getClassLoader().getResource("javascript/AIaToolbox.html")).getFile())
- .operationHandler(createOperationHandler())
- .build())
- );
-
- CefMessageRouter msgRouter = window.get().getMsgRouter();
- if (msgRouter != null) {
- msgRouter.addHandler(new CefMessageRouterHandlerAdapter() {
- @Override
- public boolean onQuery(CefBrowser browser, CefFrame frame, long queryId,
- String request, boolean persistent, CefQueryCallback callback) {
- // 处理浏览器请求
- handleBrowserQuery(browser, request, callback);
- return true;
- }
-
- @Override
- public void onQueryCanceled(CefBrowser browser, CefFrame frame, long queryId) {
- // 处理请求取消
- }
- }, true);
- }
- });
-
- // 关闭钩子
- Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- LM.llamaFreeContext(ctxHandle);
- LM.llamaFreeModel(modelHandle);
- executor.shutdown();
- }));
+ //popupHTMLWindow();
}
@@ -87,7 +55,7 @@ public class MainApplication {
.parentFrame(parent)
.icon(new ImageIcon(Objects.requireNonNull(MainApplication.class.getClassLoader().getResource("icons/logo.png"))).getImage())
.size(1280, 720)
- .htmlPath(Objects.requireNonNull(MainApplication.class.getClassLoader().getResource("javascript/AIaToolbox_dark.html")).getFile())
+ .htmlPath(FolderCreator.getJavaScriptFolder() + "\\" + "AIaToolbox_dark.html")
.operationHandler(createOperationHandler())
.build())
);
@@ -110,13 +78,60 @@ public class MainApplication {
}, true);
}
});
+ }
- // 关闭钩子
- Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- LM.llamaFreeContext(ctxHandle);
- LM.llamaFreeModel(modelHandle);
- executor.shutdown();
- }));
+ /**
+ * 弹出html预览窗口
+ */
+ public static void popupHTMLWindow(String path) {
+ AtomicReference window = new AtomicReference<>();
+ SwingUtilities.invokeLater(() -> {
+ WindowRegistry.getInstance().createNewWindow("main", builder ->
+ window.set(builder.title("Axis Innovators Box HTML查看器")
+ .icon(new ImageIcon(Objects.requireNonNull(MainApplication.class.getClassLoader().getResource("icons/logo.png"))).getImage())
+ .size(1487, 836)
+ .htmlPath(FolderCreator.getJavaScriptFolder() + "\\" + "HtmlViewer.html")
+ .operationHandler(createOperationHandler())
+ .build())
+ );
+
+ CefMessageRouter msgRouter = window.get().getMsgRouter();
+ if (msgRouter != null) {
+ msgRouter.addHandler(new CefMessageRouterHandlerAdapter() {
+ @Override
+ public boolean onQuery(CefBrowser browser, CefFrame frame, long queryId,
+ String request, boolean persistent, CefQueryCallback callback) {
+ try {
+ // 解析JSON请求
+ JsonObject requestJson = JsonParser.parseString(request).getAsJsonObject();
+ if (requestJson.has("type") && "loadInitialContent".equals(requestJson.get("type").getAsString())) {
+
+ Path filePath = Paths.get(path);
+
+ // 验证文件存在性
+ if (!Files.exists(filePath)) {
+ callback.failure(404, "{\"code\":404,\"message\":\"文件未找到\"}");
+ return true;
+ }
+
+ // 读取文件内容
+ String content = Files.readString(filePath, StandardCharsets.UTF_8);
+ callback.success(content);
+ return true;
+ }
+ } catch (Exception e) {
+ callback.failure(500, "{\"code\":500,\"message\":\"" + e.getMessage() + "\"}");
+ }
+ return false;
+ }
+
+ @Override
+ public void onQueryCanceled(CefBrowser browser, CefFrame frame, long queryId) {
+ // 处理请求取消
+ }
+ }, true);
+ }
+ });
}
private static void handleBrowserQuery(CefBrowser browser, String request, CefQueryCallback callback) {
diff --git a/src/main/java/com/axis/innovators/box/decompilation/gui/JavaPseudocodeGenerator.java b/src/main/java/com/axis/innovators/box/decompilation/gui/JavaPseudocodeGenerator.java
new file mode 100644
index 0000000..b158152
--- /dev/null
+++ b/src/main/java/com/axis/innovators/box/decompilation/gui/JavaPseudocodeGenerator.java
@@ -0,0 +1,339 @@
+package com.axis.innovators.box.decompilation.gui;
+
+import org.objectweb.asm.*;
+import org.objectweb.asm.tree.*;
+import org.objectweb.asm.tree.analysis.*;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+public class JavaPseudocodeGenerator extends MethodVisitor {
+ private final StringBuilder output = new StringBuilder();
+ private int indentLevel = 0;
+ private final Deque controlStack = new ArrayDeque<>();
+ private final Map