MigLayout 错误:“绝对链接值中的循环依赖不稳定!”

2024-01-01

为什么这个 SSCCE(带有 MigLayout 库)......

public static void main(String[] args) {

    try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }

    JFrame frame = new JFrame();
    frame.setLayout(new MigLayout(new LC().fill().insetsAll("0")));

    JTabbedPane jtp = new JTabbedPane();
    jtp.add(new JPanel(), "Tab 1");
    jtp.add(new JPanel(), "Tab 2");

    JLabel label = new JLabel("label");

    JPanel panel = new JPanel(new MigLayout(new LC().fill()));
    panel.add(jtp, "id tabbedpane, grow, span");
    panel.add(label, "pos (tabbedpane.w-label.w) 10, id label");
    label.setBounds(100, 100, 10, 10);

    frame.add(panel, "grow, span");
    frame.setSize(500, 500);
    frame.setLocationRelativeTo(null); // Sorry, Andrew Thompson
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

抛出这个错误:

Unstable cyclic dependency in absolute linked values!
Unstable cyclic dependency in absolute linked values!
Unstable cyclic dependency in absolute linked values!
Unstable cyclic dependency in absolute linked values!

?

我发现如果你删除WindowsLookAndFeel代码,然后一切运行正常......

所以,这是 MigLayout 和WindowsLookAndFeel。然而我的实际应用需要使用它。

EDIT:

这是抛出错误时的框架的样子:


看看源代码 http://grepcode.com/file/repo1.maven.org/maven2/com.miglayout/miglayout/3.7.4/net/miginfocom/layout/Grid.java,这种情况发生是因为它在进行布局时对组件的大小进行了修正。如果它进行的更正次数超过 count * 8 + 10,则会短路代码以防止无限循环。

相关来源(删除了一些内容)是:

do {
    doAgain = false;
    for (Iterator<Cell> it = grid.values().iterator(); it.hasNext();) {
        ArrayList<CompWrap> compWraps = it.next().compWraps;
        for (int i = 0, iSz = compWraps.size(); i < iSz; i++) {
            CompWrap cw = compWraps.get(i);

            if (j == 0) {
                doAgain |= doAbsoluteCorrections(cw, bounds);
                // . . .
            }

            // . . .
        }
    }
    clearGroupLinkBounds();
    if (++count > ((compCount << 3) + 10)) {
        System.err.println("Unstable cyclic dependency in absolute linked values!");
        break;
    }

} while (doAgain);

因此,如果 doAbsoluteCorctions 返回 true(在进行更正以满足大小依赖性时,如果任何组件更改大小,则会执行此操作),那么它将重复循环,再次进行更正。您看到的是当重复此操作太多次时它会打印的警告消息。由于校正可能会导致链接组件的大小发生变化,因此您可能会遇到这样的情况:校正取消设置一个组件的 y 值并设置另一个组件的 y 值,然后当第一个组件具有其 y 值时设置后,它会取消设置另一个的 y 值,并且重复此操作,直到我们用完重试次数。

Windows L&F 经常给我带来这个问题,因为组件似乎总是会陷入这样一种情况:它们会进行此校正,并且校正时只更改 1 个像素,但该校正导致它需要重做布局对于导致其向后移动 1 个像素的另一个组件。 “递归”(如果你想这样想的话)是不稳定的,并且没有得出稳定的解决方案。

我不知道删除这些消息的解决方案是什么,但如果它不会在您的应用程序中引起不寻常的“抖动”(如果是的话,您会知道我的意思),我不会担心它。这只是一条消息,表明它正在放弃更正,因为它递归了太多次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MigLayout 错误:“绝对链接值中的循环依赖不稳定!” 的相关文章

随机推荐

  • 链接到 jQuery 文件的最佳方式[重复]

    这个问题在这里已经有答案了 就网站性能 速度而言 链接到 jquery 是否更好 如下所示 或者将文件放在服务器上并从那里链接到它们 如下所示 这取决于谁拥有更快的服务器 对吗 有一些优点code jquery com 这很常见 如果用户访
  • 将十六进制字符串转换为十六进制整数

    我必须将十六进制字符串转换为十六进制整数 如下所示 color 0xFF00FF can be any color else defined by functions colorto 0xFF00FF copy of color but f
  • Google App Engine 502 具有“上游过早关闭连接”,但似乎无法到达我们的实例

    我们有一个提供 API 的 Node js App Engine 服务 很少 500 个请求中就有 1 个 向客户端返回 502 并从 Google Cloud Logging 的 nginx 日志中获取错误 upstream premat
  • 偏航、俯仰和滚转值延迟

    我正在 Windows Phone 7 1 中开发一个应用程序 我需要手机在 x 轴和 y 轴上的当前旋转度数 我尝试使用运动 API 并使用它提供的偏航俯仰和滚动的适当值 但它提供的值是延迟的 因为如果我移动手机太快并将其旋转到 90 度
  • SoapUI - 自动将自定义 SOAP 标头添加到传出请求中

    所以我想要做的是自动将 SOAP 标头添加到 SoapUI 中生成的每个请求中 因为我有数百个请求 手动执行此操作很烦人 可以说 这是我从 WSDL 生成的示例请求 如下所示
  • 简单的 NFC 代码不起作用?

    我正在尝试开始使用 NFC 编写应用程序 我只需要从一部手机向另一部手机发送一条仅包含简单字符串的 NDef 消息 我的传输活动 public class MainActivity extends Activity NfcAdapter m
  • 从 HBase shell 导出数据

    我正在尝试将数据从 HBase Shell 导出到我可以解析的文本文件 然后添加到 msysql 数据库 我目前正在使用以下命令 echo scan registration COLUMNS gt registration status h
  • CSS:Safari 的边距问题

    On the 我正在开发的网站 http like o potomo us 出于某种原因 Safari 的边距需要与 FF IE8 Chrome 和 Opera 不同吗 我有一个链接 我想将其排列在标签旁边 除了 Safari 需要 12
  • COUNTIF 范围内的唯一日期

    我正在努力寻找一种方法COUNTIF S 特定日期集之间 但仅获取唯一日期的计数 作为上下文 我连续几天跟踪仪表 我可以在同一天获得多个具有不同仪表值的实例 事实上 这种情况可能会破坏我的平均米数 天数 Data A3 A8700 是日期范
  • Matplotlib:从多个子图中抓取单个子图

    我有一个应用程序 其中有一个带有九个线图子图 3x3 的图形 我想让用户选择其中一个图表 并打开一个小的 wx Python 应用程序以允许编辑和缩放指定的子图阴谋 是否可以从选定的子图中获取所有信息 即轴标签 轴格式 线条 刻度大小 刻度
  • 检查任何正在运行的二进制文件是否是 32 位或 64 位

    可以检查应用程序包的二进制进程是否在 32 位或 64 位模式下运行 如下所示在这个问题中回答了 https stackoverflow com questions 7335245 macosx find out if a process
  • WebClient.CancelAsync — 文件仍在下载

    我正在尝试使用 Asp NET Core 创建一个 Web API 该 API 公开启动和取消大文件长时间下载的路由 服务器应该能够同时处理多个下载 下载是使用执行的WebClient DownloadFileAsync为了有一个短的响应时
  • 如果我有特定选项卡的 tabId,如何获取该选项卡的窗口对象?

    我有一个选项卡的tabId 如何获取它的窗口对象 在 chrome 扩展中看到的窗口对象 chrome tabs get YOUR TAB ID HERE function tab chrome windows get tab window
  • 如何过滤正在运行的节点

    我想过滤正在运行的节点列表 我尝试了下面的命令 但它只显示运行状态 我需要用它的名称进行过滤 有什么帮助吗 root techsl kubectl get nodes o jsonpath range items metadata name
  • 如何从 Blazor C# 代码生成 window.history.go(-1)?

    如何在 Blazor 上从 C 代码生成 window history go 1 我尝试使用 JSRuntime Current InvokeAsync JSRuntime Current InvokeAsync lt string gt
  • 在R中的plotly直方图函数中自定义bin宽度

    我有一个数据集 其中包含每天的日期和通话量 当我使用plotly R 包绘制它们时 除了其中 1 个之外 所有日期都将每个日期分隔到不同的容器中 然而 这一棘手的数据子集而是将数据分组为 2 天的间隔 这并不是非常有用的信息 我确信这是一个
  • 运行composer时如何始终使用ignore-platform-reqs标志?

    在我的本地计算机上 我有 php v7 0 3 我的一个项目依赖于 php v5 5 正如预期的那样 简单运行composer install崩溃 Your requirements could not be resolved to an
  • SerializeObject 方法运行正确吗?

    我在项目中添加了 json dll 并尝试序列化对象 ProductType itemToEdit new ProductType Name string jsonString JsonConvert SerializeObject ite
  • 用 Python/C API 替换 boost:python 函数包装器后的 std::bad_alloc

    我在 C 中有一个函数 我用它来扩展 python 之前使用BOOST MODULE函数来完成这个任务 转换到 python C API 时出现此错误 我确信run mymodule没有这个包装器 函数可以正常运行 static PyObj
  • MigLayout 错误:“绝对链接值中的循环依赖不稳定!”

    为什么这个 SSCCE 带有 MigLayout 库 public static void main String args try UIManager setLookAndFeel com sun java swing plaf wind