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