当前位置: 首页 > 知识库问答 >
问题:

Intellij插件开发:工具窗口扩展在不同的项目窗口中打开时为空

赫连捷
2023-03-14

当我在不同的intellij窗口中打开多个(3-4)项目时,我的JSON插件工具窗口是空白的。这是我的plugin.xml

<idea-plugin>
  <id>com.xxxxx.json.Editor</id>
  <name>JSON Editor</name>
  <version>1.5</version>
  <vendor email="xxxxxxxxxx" url="xxxxxxx">xxxxxx</vendor>

  <description><![CDATA[
      JetBrains IntelliJ IDE plugin for easy viewing and editing of currently opened JSON file in IDE using Tree Structure.
    ]]></description>

  <change-notes><![CDATA[
      Feature: Indentation changes - adding space after ':' char.
    ]]>
  </change-notes>

  <idea-version since-build="192.6"/>
  <extensions defaultExtensionNs="com.intellij">
    <toolWindow id="JSON Editor" anchor="right" factoryClass="JsonEditor" />
  </extensions>

  <actions>
  </actions>

</idea-plugin>

这是插件JSON编辑器工具窗口的内容(按钮和树视图)的截图。

这是同一个工具窗口的内容的截图,完全空白(如果在不同的窗口中打开多个(3-4)项目,就会发生这种情况)。

以下是createToolWindowContent方法的代码-

public class JsonEditor implements ToolWindowFactory {

    private JPanel mainContent;
    ....
    ....

    @Override
    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
        this.project = project;
        ContentFactory contentFactory = 
        ContentFactory.SERVICE.getInstance();
        Content content = contentFactory.createContent(mainContent, "", false);
        toolWindow.getContentManager().addContent(content);
    }
}

我该如何解决这个问题?我还可以在不同的环境中打开插件扩展实例的不同状态吗?

共有1个答案

壤驷承
2023-03-14

每次调用createToolWindowContent方法时,都需要创建不同的mainContent实例,因为AWT小部件只能有一个父级。

每个IDE窗口都会调用此方法,因此一个窗口将“获胜”。

因此,不用编写main Content,而是编写createMainContentInstance()。然后,您可以通过使用当前窗口的Project对象来全局访问所需的详细信息,这在两个窗口之间是不同的。

 类似资料:
  • 我试图创建一个程序,它有一个tkinter窗口打开,然后当你按下一个按钮,它关闭tkinter窗口,打开一个pyplay窗口。然而,当我点击按钮打开pyplay窗口时,它会打开pyplay窗口,而tkinter窗口保持打开状态。 代码: 我还尝试使用: 我怎样才能解决这个问题?(我正在MacOS 11.1上运行Python 3.7.7)

  • 我正在使用Pygame模块制作一个简单的游戏。我需要Tkinter窗口与Pygame窗口一起打开。 每当我试图打开两个窗口时,第二个窗口只有在我杀死第一个窗口后才会打开。 现在,我能想到的唯一解决方案是使用多线程。但是,我无法实现它。 我该怎么做呢?我真的很感激这里的帮助。谢谢你!

  • 但是我在系统上有另一个会话(相同的项目并且似乎是相同的条件),无论我测试什么,都不可能打开这个工具窗口。我可以调试、设置断点并通过“快速评估”查看值,但评估表达式窗口无法打开。 在这一点上,我不提供更多的项目信息,因为我不认为这会有什么不同。。。 我首先尝试了另一个空项目,我有同样的行为,所以这可能是macos的问题,我不知道。我还尝试在第二个会话中重新安装IDE,但它也会这样做。 在我做了一些不

  • 问题内容: 如何在JavaScript中打开一个新窗口并插入HTML数据,而不仅仅是链接到HTML文件? 问题答案: 您可以使用window.open在javascript中打开一个新的窗口/选项卡(根据浏览器设置)。 通过使用document.write,您可以将HTML内容写入打开的窗口。

  • 查看这段代码,它们展示了一种在登录后显示新窗口的方法。当用户名和密码是正确的,它打开新的对话框。我想要一个按钮点击打开新的对话框,而不检查用户名和密码。

  • 任务:Main.Main()失败无法创建窗口 执行任务“:main.main()”失败。 进程“命令”c:/program files/java/jdk-16/bin/java.exe“以非零退出值-1结束 null null