我正在将graphstream(www.graphstream-project.org)集成到JetBrains MPS(即IntelliJ)中。图表显示在 IntelliJ 的“工具窗口”中(侧面的面板,见截图)。
如果面板处于“浮动”模式(未停靠),则可以正常工作(就像在独立使用 graphstream 时一样,即在 JFrame 中)。但在“停靠”模式下(如屏幕截图所示),图表在某些情况下会消失,即工具窗口显示一个空白区域。
我无法重现导致问题的确切原因,但它似乎与 UI 相关。有时调整停靠面板的大小或在 IntelliJ 的某些完全不相关的部分显示工具提示会触发“消失”,有时不会。如果再次聚焦,图形总是会重新出现(例如单击空白区域)。
我觉得这是 IntelliJ 中的一个错误,但如果有任何想法如何进一步调查问题(我可以从哪里开始调试等),我将不胜感激。
代码 - 简短版本:有一个JPanel
包含DefaultView
由 graphstream 使用创建的实例Viewer.getDefaultView()
。这将移交给 MPS / IntelliJ API。
完整代码:
// construct the graph
Graph graph = new SingleGraph("Graph");
graph.addAttribute("ui.quality");
graph.addAttribute("ui.antialias");
// ... calls to graph.addNode(), graph.addEdge() to generate some content
// construct Viewer and ViewPanel (ViewPanel extends JPanel)
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
ViewPanel viewPanel = viewer.getDefaultView();
// ViewPanel is added to another JPanel as the latter will include a toolbar later
JPanel panel = new JPanel(new BorderLayout());
panel.add(BorderLayout.CENTER, viewPanel);
// The panel is returned to MPS, which uses the IntelliJ API to
// create respective tool window. This part is not under my control.
// If you think it is relevant please mention it.
return panel;
/编辑:
在进一步调查这个问题时,我发现一定有一些东西会触发错误的行为。一开始一切正常,但一段时间后,事情表现得很奇怪并继续这样做,直到我重新创建 IntelliJ 工具窗口。我制作了一个简短的视频片段来说明这一点,请参阅YouTube。
我不知道什么可能是“触发器”。我假设有一些竞争条件/线程相关的问题。