访问当前进程的句柄

问题描述 投票:2回答:1

在我们的RCP 4应用程序中,由于没有可用的句柄而引发了SWT异常。这可能是由于资源泄漏或其他运行的第三方应用程序引起的。我们无法在开发中重现此问题,因此我们希望记录任何将来可能会帮助我们解决此问题的信息。

我们希望获取有关手柄的信息。例如。总控点及其用途,例如图像,字体和合成。

我一直在寻找这个东西,我一直在努力寻找有关如何用Java做到这一点的任何东西。我们可以执行命令行来获取信息,但这并不是一种很好的方式。

通过Handles,我指的是Windows上的GDI HandlesUser Handles

怎么办?

Handles

plugin.xml

<plugin>
   <extension
         id="product"
         point="org.eclipse.core.runtime.products">
      <product
            application="org.eclipse.e4.ui.workbench.swt.E4Application"
            name="Our App name">
         <property
               name="modelResourceHandler"
               value="bundleclass://a.model.resource.handler.ModelResourceHandler">
         </property>
      </product>
   </extension>
</plugin>
java windows swt e4
1个回答
0
投票

Eclipse Sleak可以监视SWT进行的分配-代码为here

但是,这需要使用启用跟踪的Display对象创建SWT DeviceData。标准的E4Application不执行此操作。

因此,要使用此功能,您需要使用自己的扩展E4Application的应用程序类-类似于:

import org.eclipse.e4.ui.internal.workbench.swt.E4Application;

import org.eclipse.swt.graphics.DeviceData;
import org.eclipse.swt.widgets.Display;

public class MyApplication extends E4Application
{
  /** Enable tracking */
  private static final boolean TRACKING = true;
  /** Enable debug */
  private static final boolean DEBUG = false;

  public MyApplication()
  {
    super();
  }

  @Override
  public Display getApplicationDisplay()
  {
    Display current = Display.getCurrent();
    if (current == null)
     {
       if (TRACKING || DEBUG)
        {
          DeviceData data = new DeviceData();
          data.tracking = TRACKING;
          data.debug = DEBUG;

          current = new Display(data);

          if (data.tracking)
           {
             Sleak sleak = new Sleak();
             sleak.open();
           }
        }
       else
        {
          current = new Display();
        }
     }

    return super.getApplicationDisplay();
  }
}

您将需要在plugin.xml中声明此应用程序:

   <extension
         id="application"
         name="Application name"
         point="org.eclipse.core.runtime.applications">
      <application
            cardinality="singleton-global"
            thread="main"
            visible="true">
         <run
               class="your.package.MyApplication">
         </run>
      </application>
   </extension>

更改plugin.xml中的产品声明以使用此应用程序代替org.eclipse.e4.ui.workbench.swt.E4Application

© www.soinside.com 2019 - 2024. All rights reserved.