fix : 启动两次的bug

This commit is contained in:
clay
2024-05-08 23:17:03 +08:00
parent e6befa0459
commit 95f7d06cba

View File

@@ -1,122 +1,122 @@
package cn.fateverse.query; //package cn.fateverse.query;
//
import cn.fateverse.common.code.config.JavaCodeProperties; //import cn.fateverse.common.code.config.JavaCodeProperties;
import cn.fateverse.common.code.engine.JavaCodeEngine; //import cn.fateverse.common.code.engine.JavaCodeEngine;
import cn.fateverse.common.code.engine.JavaScriptEngine; //import cn.fateverse.common.code.engine.JavaScriptEngine;
import cn.fateverse.common.code.model.EngineResult; //import cn.fateverse.common.code.model.EngineResult;
//
import java.util.concurrent.FutureTask; //import java.util.concurrent.FutureTask;
//
//
/** ///**
* @author Clay // * @author Clay
* @date 2024/4/22 16:04 // * @date 2024/4/22 16:04
*/ // */
public class JavaScriptTest { //public class JavaScriptTest {
public static void main(String[] args) throws Exception { // public static void main(String[] args) throws Exception {
String code = "function execute(data) {\n" + // String code = "function execute(data) {\n" +
" console.log(data)\n" + // " console.log(data)\n" +
" console.log(\"test console!\")\n" + // " console.log(\"test console!\")\n" +
" let add = (a, b) => a + b; // 使用箭头函数\n" + // " let add = (a, b) => a + b; // 使用箭头函数\n" +
" console.log(\"Adding 5 and 3:\", add(5, 3));\n\n" + // " console.log(\"Adding 5 and 3:\", add(5, 3));\n\n" +
" for (let i = 0; i < 1000; i++) {\n" + // " for (let i = 0; i < 1000; i++) {\n" +
" console.log(i)\n" + // " console.log(i)\n" +
" }" + // " }" +
" return \"success\";\n" + // " return \"success\";\n" +
"}"; // "}";
//
//
JavaCodeProperties properties = new JavaCodeProperties(); // JavaCodeProperties properties = new JavaCodeProperties();
properties.setClassPath("C:\\home\\clay\\code\\"); // properties.setClassPath("C:\\home\\clay\\code\\");
JavaCodeEngine javaCodeEngine = new JavaCodeEngine(properties); // JavaCodeEngine javaCodeEngine = new JavaCodeEngine(properties);
//
//
// EngineResult<Object> executeScript = JavaScriptEngine.executeScript(code, "execute", "测试控制台输出"); //// EngineResult<Object> executeScript = JavaScriptEngine.executeScript(code, "execute", "测试控制台输出");
//
String finalCode = "function execute(data) {\n" + // String finalCode = "function execute(data) {\n" +
" console.log(data)\n" + // " console.log(data)\n" +
" console.log(\"test console!\")\n" + // " console.log(\"test console!\")\n" +
" let add = (a, b) => a + b; // 使用箭头函数\n" + // " let add = (a, b) => a + b; // 使用箭头函数\n" +
" console.log(\"Adding 5 and 3:\", add(5, 3));\n\n" + // " console.log(\"Adding 5 and 3:\", add(5, 3));\n\n" +
" for (let i = 0; i < 1000; i++) {\n" + // " for (let i = 0; i < 1000; i++) {\n" +
" console.log(i)\n" + // " console.log(i)\n" +
" }" + // " }" +
" return \"success\";\n" + // " return \"success\";\n" +
"}"; // "}";
FutureTask<EngineResult> engineResultFutureTask = new FutureTask<>(() -> { // FutureTask<EngineResult> engineResultFutureTask = new FutureTask<>(() -> {
return JavaScriptEngine.execute(finalCode, "execute", false, "测试控制台输出"); // return JavaScriptEngine.execute(finalCode, "execute", false, "测试控制台输出");
}); // });
//
//
String finalCode1 = "import java.util.*;\n" + // String finalCode1 = "import java.util.*;\n" +
"import java.util.stream.*;\n" + // "import java.util.stream.*;\n" +
"\n" + // "\n" +
"public class DataAdapter100 {" + // "public class DataAdapter100 {" +
"\n" + // "\n" +
" public static Object execute(String data) {\n" + // " public static Object execute(String data) {\n" +
" for (int i = 0; i < 1000; i++) {\n" + // " for (int i = 0; i < 1000; i++) {\n" +
" System.out.println(i);\n" + // " System.out.println(i);\n" +
" }\n" + // " }\n" +
" return \"qwewe\";\n" + // " return \"qwewe\";\n" +
" }" + // " }" +
"}\n"; // "}\n";
FutureTask<EngineResult> engineResultFutureTask1 = new FutureTask<>(() -> { // FutureTask<EngineResult> engineResultFutureTask1 = new FutureTask<>(() -> {
return javaCodeEngine.execute(finalCode1, "DataAdapter100", "execute", new Class[]{String.class}, new Object[]{"test"}, true); // return javaCodeEngine.execute(finalCode1, "DataAdapter100", "execute", new Class[]{String.class}, new Object[]{"test"}, true);
}); // });
new Thread(engineResultFutureTask).start(); // new Thread(engineResultFutureTask).start();
new Thread(engineResultFutureTask1).start(); // new Thread(engineResultFutureTask1).start();
// EngineResult<Object> execute = javaCodeEngine.execute(code, "DataAdapter100", "execute", new Class[]{String.class}, new Object[]{"test"}, true); //// EngineResult<Object> execute = javaCodeEngine.execute(code, "DataAdapter100", "execute", new Class[]{String.class}, new Object[]{"test"}, true);
//
//
EngineResult x = engineResultFutureTask.get(); // EngineResult x = engineResultFutureTask.get();
EngineResult x1 = engineResultFutureTask1.get(); // EngineResult x1 = engineResultFutureTask1.get();
System.out.println(x); // System.out.println(x);
System.out.println(x1); // System.out.println(x1);
//
//
// EngineResult<Object> capture = MultiThreadedCapture.capture(() -> { //// EngineResult<Object> capture = MultiThreadedCapture.capture(() -> {
// ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js"); //// ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
// Invocable inv = (Invocable) engine; //// Invocable inv = (Invocable) engine;
// try { //// try {
// engine.eval(finalCode); //// engine.eval(finalCode);
// return inv.invokeFunction("execute", "args"); //// return inv.invokeFunction("execute", "args");
// } catch (ScriptException | NoSuchMethodException e) { //// } catch (ScriptException | NoSuchMethodException e) {
// throw new RuntimeException(e); //// throw new RuntimeException(e);
//// }
//// });
//// System.out.println(capture);
//// EngineResult<Object> objectEngineResult = JavaScriptEngine.executeScript(finalCode, "execute", "测试控制台输出");
////
//// ByteArrayOutputStream baos = new ByteArrayOutputStream();
//// PrintStream oldOut = System.out;
//// System.setOut(new PrintStream(baos));
//
//
//// EngineResult<Object> capture = MultiThreadedCapture.capture(() -> {
//// int someNumber = 42;
//// System.out.println(someNumber);
//// return null;
//// });
//
//
// // 执行产生数值输出的代码
//// System.out.println(objectEngineResult);
//// ScriptEngine engine = JavaScriptEngine.getEngine();
//// Invocable inv = (Invocable) engine;
//// engine.eval(finalCode);
//// inv.invokeFunction("execute", "args");
//// System.out.println(capture);
//
//// MultiThreadedCapture.executor.shutdown();
// // 恢复标准输出流
//// System.setOut(oldOut);
////
//// System.setOut(oldOut);
//// // 从捕获的字节数组输出流中获取打印的文本
//// String capturedOutput = baos.toString();
//// System.out.println("Captured output: " + capturedOutput);
//
// } // }
// });
// System.out.println(capture);
// EngineResult<Object> objectEngineResult = JavaScriptEngine.executeScript(finalCode, "execute", "测试控制台输出");
// //
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// PrintStream oldOut = System.out;
// System.setOut(new PrintStream(baos));
// EngineResult<Object> capture = MultiThreadedCapture.capture(() -> {
// int someNumber = 42;
// System.out.println(someNumber);
// return null;
// });
// 执行产生数值输出的代码
// System.out.println(objectEngineResult);
// ScriptEngine engine = JavaScriptEngine.getEngine();
// Invocable inv = (Invocable) engine;
// engine.eval(finalCode);
// inv.invokeFunction("execute", "args");
// System.out.println(capture);
// MultiThreadedCapture.executor.shutdown();
// 恢复标准输出流
// System.setOut(oldOut);
// //
// System.setOut(oldOut); //}
// // 从捕获的字节数组输出流中获取打印的文本
// String capturedOutput = baos.toString();
// System.out.println("Captured output: " + capturedOutput);
}
}