带Java Swing的JxBrowser(IntelliJ插件) - “收到信号10 BUS_ADRERR”

时间:2017-12-04 18:21:09

标签: java swing intellij-plugin jxbrowser

我正在编写一个IntelliJ插件,并尝试通过Java Swing将JxBrowser集成到插件的工具窗口中。

我正在使用toolWindow扩展来简化工具窗口集成。

的plugin.xml

  <extensions defaultExtensionNs="com.intellij">
    <toolWindow id="pluginid" anchor="right" factoryClass="com.solutionloft.codeclippy.MainWindowFactory" />
  </extensions>

所以我的主要工厂类看起来像这样:

public class MainWindowFactory implements ToolWindowFactory {

    @Override
    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
        Browser browser = new Browser();
        BrowserView view = new BrowserView(browser);
        Content content = toolWindow.getContentManager().getFactory().createContent(view, "", false);
        toolWindow.getContentManager().addContent(content);

        browser.loadHTML("<html><body><h1>Hello World!</h1></body></html>");
    }
}

这似乎在我最初在本地运行插件时工作(工具窗口出现,我可以看到Hello World),但是如果我终止进程然后再次尝试运行它,我会遇到这个错误:< / p>

Received signal 10 BUS_ADRERR 000103bc3000
 [0x00017cd9540c]
 [0x00017cd95301]
 [0x7fff572eef5a]
 [0x7fbe7e9f5000]
[end of stack trace]

Process finished with exit code 138 (interrupted by signal 10: SIGBUS)

我错过了某种清理步骤吗?我不确定还能运行什么 - 我此时发现的唯一解决方法是重新启动计算机,所以我猜一些进程必须仍在运行才会导致冲突。什么是正确的清理方法?它与browser.dispose()有什么关系吗?我没有太多运气找到关于.dispose()何时适合/如果需要的文件。

我正在使用:
* macOS High Sierra
* Java 1.8.0_151作为我的JDK
* PyCharm Ultimate作为我的JRE

谢谢!

更新:注意如果我终止此进程/System/Library/Frameworks/LocalAuthentication.framework/Support/coreauthd,则问题会在接下来的几次运行中消失。但有时候这个过程不存在,杀死一个仍在运行的java进程就是修复......奇怪。

2 个答案:

答案 0 :(得分:0)

根据article,所有浏览器实例都应该在您不需要时处理。请在关闭应用程序之前尝试处理所有浏览器实例。

答案 1 :(得分:0)

根据TeamDev的支持,解决方案是设置系统属性jxbrowser.ipc.external=true。在创建浏览器实例之前调用System.setProperty("jxbrowser.ipc.external", "true")应该可以解决问题。问题在于JxBrowser将以轻量模式运行。

您还可以确保通过browser.dispose()处理所有浏览器实例,并通过BrowserCore.shutdown()处理Chromium引擎。