【问题标题】:SWT Table with SWT.VIRTUAL raises StackOverflowError带有 SWT.VIRTUAL 的 SWT 表引发 StackOverflowError
【发布时间】:2010-12-01 01:33:52
【问题描述】:

在最近安装 Windows 7 Professional 之后,我遇到了一个奇怪的问题,即从 SWT 中的填充表中删除 TableItem。它特定于 Windows 7 和表格的 SWT.VIRTUAL 样式常量。

考虑以下代码:

table = new Table(parent, SWT.VIRTUAL | Skin.SCROLL_STYLE |
                          SWT.FULL_SELECTION | SWT.BORDER);
TableItem item = new TableItem(table, SWT.NONE);
item.setText("Table item");
table.remove(0);

这会导致 StackOverflowError 如下:

Caused by: java.lang.StackOverflowError
    at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
    at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2312)
    at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:334)
    at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:200)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4036)
    at org.eclipse.swt.widgets.Table.windowProc(Table.java:5520)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4602)
    at org.eclipse.swt.internal.win32.OS.SendMessageW(Native Method)
    at org.eclipse.swt.internal.win32.OS.SendMessage(OS.java:3106)
    at org.eclipse.swt.widgets.Table.wmNotifyChild(Table.java:6319)
    at org.eclipse.swt.widgets.Control.wmNotify(Control.java:4877)
    at org.eclipse.swt.widgets.Composite.wmNotify(Composite.java:1757)
    at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:4507)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4000)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4602)
    at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
    at ...

如上所示,堆栈循环从显示器的windowProc 调用到操作系统的CallWindowProcW;这让我怀疑它与特定于 Windows 7 的 SWT 实现有关。堆栈跟踪最终源自table.remove(0) 行。

在 Vista、XP 或 Mac OS X 下测试没有问题。

删除 SWT.VIRTUAL 样式常量可以解决问题,但不允许在表中使用自定义对象。

这似乎是一个 SWT 错误,还是我遗漏了什么?

【问题讨论】:

    标签: java windows-7 swt stack-overflow


    【解决方案1】:

    改用 item.dispose() 吗?

    【讨论】:

    • 这实际上是我在尝试使用table.remove(0) 修复它之前所拥有的。该错误已在当前 SWT 版本中得到确认和修复。
    【解决方案2】:

    看起来像一个错误。通过测试用例向 SWT 人员报告。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 2015-04-21
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2016-12-11
    相关资源
    最近更新 更多