js call java

明白了,简洁说:在 VSCode 插件里,前端用 TypeScript,后端用 Java,通常用子进程(child_process)启动 Java 程序,通过**标准输入输出(stdin/stdout)**通信。

这种方式稳定且简单,适合你的场景。

下面是完整示例:


1. Java 后端(Backend.java)

// Backend.java
import java.util.Scanner;

public class Backend {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            String input = scanner.nextLine();
            System.out.println("Java received: " + input);
        }
        scanner.close();
    }
}

编译:

javac Backend.java

生成 Backend.class


2. VSCode 插件里 TypeScript 调用 Java

(比如放在你的 extension.ts 里)

import * as vscode from 'vscode';
import { spawn } from 'child_process';

export function activate(context: vscode.ExtensionContext) {
    const javaProcess = spawn('java', ['-cp', context.extensionPath, 'Backend']);

    javaProcess.stdout.on('data', (data) => {
        vscode.window.showInformationMessage(`From Java: ${data.toString()}`);
    });

    javaProcess.stderr.on('data', (data) => {
        console.error(`Java error: ${data}`);
    });

    javaProcess.on('close', (code) => {
        console.log(`Java process exited with code ${code}`);
    });

    // 例子:发送一条消息给 Java
    let disposable = vscode.commands.registerCommand('extension.sendMessage', () => {
        javaProcess.stdin.write('Hello from VSCode!\n');
    });

    context.subscriptions.push(disposable);
}

export function deactivate() {}

简单总结


要不要我顺便再给你画一个小通信流程图?更直观一点📈?