有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用可执行Jar文件的java Chrome本机消息传递

我已经创建了一个Chrome扩展,并将nativeMessaging权限添加到清单中

我正在打开本机消息传递主机的端口

本机消息传递主机的清单指向一个可执行jar文件

当我启动扩展时,没有错误,连接看起来很好,但是jar文件中的代码似乎从未运行过。(为了进行测试,我展示了在main()方法中创建的新JFrame。双击jar文件时,会显示JFrame。但是当通过Chrome原生消息传递运行jar文件时,JFrame不会显示

我有什么遗漏吗


共 (3) 个答案

  1. # 1 楼答案

    我通过让chrome启动一个包含以下内容的bat文件,成功实现了这一点:

    @echo off
    java -jar your_file.jar %*
    

    回声消失是一个细节,我花了一些时间才弄清楚

  2. # 2 楼答案

    你的主要姓名中有大写字母吗? 我有这个问题+同样的症状,这为我解决了它 (尽管我现在得到了一个不同的错误)

    { “名称”:“com.google.chrome.example.echoUppercase”,<;-行不通 ....

    “名称”:“com.google.chrome.example.echouppercase”,<;-作品 }

  3. # 3 楼答案

    我已经使用Java可执行包装器(我使用了Launch4j)实现了这一点

    这是清单文件:

    {
        "name": "com.your.application",
        "description": "Your description.",
        "path": "path\\to\\wrapped\\java\\host.exe",
        "type": "stdio",
        "allowed_origins": [
            "chrome-extension://idofyourchromeextension/"
        ]
    }
    

    这是我包装的本机主机应用程序:

    import javax.swing.*;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.URISyntaxException;
    
    public class ChromeHandler
    {
        static public void main(String[] args)
        {
            InputStream input = System.in;
            try
            {
                System.in.available();
            }
            catch (Exception e)
            {
                return;
            }
            char receivedChar;
            try{
                FileOutputStream output = new FileOutputStream("PathToTextFile");
                while((receivedChar = (char) input.read()) != -1)
                {
                    output.write(receivedChar);
                    //My messages only have the '}' character at the end.
                    if(receivedChar == '}')
                    {
                        return;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }