gpt4 book ai didi

java - "no more handles"的原因

转载 作者:行者123 更新时间:2023-11-30 11:11:28 25 4
gpt4 key购买 nike

对于我们基于 SWT 的应用程序,我们有一些不同的 SWT 崩溃报告,其中 SWT 崩溃并出现“没有更多句柄”错误。这种情况只发生在极少数人身上,有时甚至发生在启动应用程序的早期阶段。早期应用程序状态的典型堆栈跟踪如下所示:

Caused by: org.eclipse.swt.SWTError: No more handles
at org.eclipse.swt.SWT.error(SWT.java:4467)
at org.eclipse.swt.SWT.error(SWT.java:4356)
at org.eclipse.swt.SWT.error(SWT.java:4327)
at org.eclipse.swt.widgets.Widget.error(Widget.java:476)
at org.eclipse.swt.widgets.TaskBar.createHandle(TaskBar.java:103)
at org.eclipse.swt.widgets.TaskBar.<init>(TaskBar.java:96)
at org.eclipse.swt.widgets.Display.getSystemTaskBar(Display.java:2567)
...

我们已经测试了我们的应用程序,在正常情况下它不会泄漏任何资源(字体、颜色、图像、GC 等)、Windows 任务管理器中的值(句柄、USER 对象、GDI 对象、. ..) 只排在前三分之一,但通常不是最前面的。

什么原因会导致这样的问题——会不会是机器上运行了很多应用程序,其他可能被调试的应用程序泄漏了大量资源,还有什么?什么信息,例如“tasklist.exe”的输出 我需要向用户请求以获得可能原因的线索吗?

最佳答案

我刚收到同样的崩溃报告。为了更深入地研究,可以使用以下代码:

import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.widgets.Display;

public class InvestigateSwtProblem {

static final byte[] CLSID_TaskbarList = new byte[16];
static final byte[] IID_ITaskbarList3 = new byte[16];

static {
OS.IIDFromString("{56FDF344-FD6D-11d0-958A-006097C9A090}\0".toCharArray(), CLSID_TaskbarList); //$NON-NLS-1$
OS.IIDFromString("{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}\0".toCharArray(), IID_ITaskbarList3); //$NON-NLS-1$
}

public static void main(String[] args) {
Display display = new Display();

int /*long*/[] ppv = new int /*long*/ [1];
int hr = OS.CoCreateInstance(CLSID_TaskbarList, 0, OS.CLSCTX_INPROC_SERVER, IID_ITaskbarList3, ppv);
System.out.println("Result of CoCreateInstance = " + hr);
}
}

在我的例子中,错误是 -2147024882,我在 winerror.h 中发现它是:

//
// MessageId: E_OUTOFMEMORY
//
// MessageText:
//
// Ran out of memory
//
#define E_OUTOFMEMORY _HRESULT_TYPEDEF_(0x8007000EL)

我仍然不知道原因或解决方案,但至少你有话要告诉系统管理员。

附言。这如果用于 32 位 SWT。我没有在 64 位 SWT 上测试过,但我想您应该将代码中出现 int/*long*/ 的 int 替换为 long。

关于java - "no more handles"的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com