Java Chrome扩展无法使用本机消息连接到jar

Java Chrome扩展无法使用本机消息连接到jar,java,google-chrome,google-chrome-extension,chrome-native-messaging,Java,Google Chrome,Google Chrome Extension,Chrome Native Messaging,我现在正试图编写非常基本的chrome exstension,它可以与可执行的jar进行通信,但似乎我甚至无法在它们之间建立连接。Chrome调试说端口断开了,我不知道为什么,也找不到有效的解决方案 我的扩展名由4个文件组成: 一些icon.png manifest.json popup.html JAVA Java类如下所示: package pl.splaw.nativejavaapp; import java.io.IOException; import java.util.Scanne

我现在正试图编写非常基本的chrome exstension,它可以与可执行的jar进行通信,但似乎我甚至无法在它们之间建立连接。Chrome调试说端口断开了,我不知道为什么,也找不到有效的解决方案

我的扩展名由4个文件组成:

一些icon.png

manifest.json popup.html JAVA Java类如下所示:

package pl.splaw.nativejavaapp;

import java.io.IOException;
import java.util.Scanner;

public class NativeApp {

    public static void main(String[] args) throws IOException {
        System.out.println("STARTED");
        Scanner sc = new Scanner(System.in);

        try {
            System.in.available();
        } catch (Exception e) {
            return;
        }
        String fullMessage = "";
        while (sc.hasNext()) {
            String line = sc.nextLine();
            fullMessage += line;
            if (fullMessage.equalsIgnoreCase("test")) {
                System.out.write(getBytes("TEST OK".length()));
                System.out.write("TEST OK".getBytes());
            } else {
                System.out.write(getBytes("TEST ERROR".length()));
                System.out.write("TEST ERROR".getBytes());
            }
            break;
        }
    }

    public static byte[] getBytes(int length) {
        byte[] bytes = new byte[4];
        bytes[0] = (byte) (length & 0xFF);
        bytes[1] = (byte) ((length >> 8) & 0xFF);
        bytes[2] = (byte) ((length >> 16) & 0xFF);
        bytes[3] = (byte) ((length >> 24) & 0xFF);
        return bytes;
    }
}
REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\pl.splaw.nativejavaapp" /ve /t REG_SZ /d "C:\PROJEKTY\Chrome native and extension\native\native jar i manifest\manifest.json" /f
manifest.json jar文件旁边:

{
    "name": "pl.splaw.nativejavaapp",
    "description": "Test native app",
    "path": "C:\\PROJEKTY\\Chrome native and extension\\native\\native jar i manifest\\NativeApp-jar-with-dependencies.jar",
    "type": "stdio",
    "allowed_origins": [
        "chrome-extension://ID_of_my_extension_when_added_to_chrome/"
    ]
}
我已运行命令添加注册表项,如下所示:

package pl.splaw.nativejavaapp;

import java.io.IOException;
import java.util.Scanner;

public class NativeApp {

    public static void main(String[] args) throws IOException {
        System.out.println("STARTED");
        Scanner sc = new Scanner(System.in);

        try {
            System.in.available();
        } catch (Exception e) {
            return;
        }
        String fullMessage = "";
        while (sc.hasNext()) {
            String line = sc.nextLine();
            fullMessage += line;
            if (fullMessage.equalsIgnoreCase("test")) {
                System.out.write(getBytes("TEST OK".length()));
                System.out.write("TEST OK".getBytes());
            } else {
                System.out.write(getBytes("TEST ERROR".length()));
                System.out.write("TEST ERROR".getBytes());
            }
            break;
        }
    }

    public static byte[] getBytes(int length) {
        byte[] bytes = new byte[4];
        bytes[0] = (byte) (length & 0xFF);
        bytes[1] = (byte) ((length >> 8) & 0xFF);
        bytes[2] = (byte) ((length >> 16) & 0xFF);
        bytes[3] = (byte) ((length >> 24) & 0xFF);
        return bytes;
    }
}
REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\pl.splaw.nativejavaapp" /ve /t REG_SZ /d "C:\PROJEKTY\Chrome native and extension\native\native jar i manifest\manifest.json" /f
现在,当我在Chrome中选择扩展并单击按钮时,除了控制台中的错误之外,什么也没发生

未捕获错误:尝试使用断开连接的端口对象


我做错了什么?

我认为while循环应该是无条件的:whiletrue因为sc.hasNext只有在消息实际发送时才是真的,所以你的循环不能工作。IIRC上个月有一个类似/重复的问题,我现在找不到。我改为whiletrue,但没有解决它。。。我做了更多的调试,似乎连接启动了,但我的java在System.in.available上失败了一些IOException,但消息是波兰语的,所以我不确定我是否能正确翻译它,但或多或少它说访问不正确。。。但我不知道为什么?当我从命令行运行jar时,它可以正常工作,但从chrome System.in运行时不工作。。。WTF?不确定chrome是否可以直接启动.jar,或者它是否可以在没有控制台作为窗口应用程序的情况下启动。尝试使用@java%~dp0\NativeApp-jar-with-dependencies.jar或类似的代码创建一个简单的.bat文件启动器。我尝试使用简单的批处理文件,但仍然没有做到这一点。。。控制台只是不想继续打开。。。用不同的语言写作将是唯一的解决办法。。。
REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\pl.splaw.nativejavaapp" /ve /t REG_SZ /d "C:\PROJEKTY\Chrome native and extension\native\native jar i manifest\manifest.json" /f