首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取Java组件ID

如何获取Java组件ID
EN

Stack Overflow用户
提问于 2011-03-08 21:57:54
回答 2查看 2.2K关注 0票数 2

我在java应用程序中使用了MPlayer。根据它的文档,需要我告诉MPlayer用于嵌入它的窗口ID。我是这样做的:

代码语言:javascript
复制
long winid = 0; //Window ID.
if (osName.startsWith("Windows")){
   final Class<?> cl = Class.forName("sun.awt.windows.WComponentPeer");
   java.lang.reflect.Field f = cl.getDeclaredField("hwnd");
   f.setAccessible(true);
   winid = f.getLong(overlay.getPeer()); //overlay is a canvas where MPlayer is embedded.
}
System.out.println(winid);

但是,getPeer()方法已弃用。我想知道是否有解决方法。

非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-09 09:25:47

我留下了一个评论,但这值得一个答案。添加本机代码,MPlayer,这样您就只能使用impl和OS了。getPeer()的弃用主要是b/c的,你可以用它做非常奇怪的事情,而且不能移植。

在你的情况下,这并不重要。

注意: WComponentPeer有一个公共的getHWnd()方法,所以你不需要通过反射来欺骗它。您现在拥有的代码实际上是非常不安全的,因为它不会检查实际的对等体。

你可以这样替换它:

代码语言:javascript
复制
long hWnd = 0
try{ 
  Class clazz = Class.forName("sun.awt.windows.WComponentPeer);
  synchronized(overlay.getTreeLock()){
    ComponentPeer peer = overlay.getPeer();
    if (clazz.isInstance(peer)){
      hWnd = ((sun.awt.windows.WComponentPeer) overlay.getPeer()).getHWnd();
    }
  }
}catch(ClassNotFound _noWindows){
//process..
}

祝好运!

票数 1
EN

Stack Overflow用户

发布于 2011-03-09 09:09:46

根据documentation的说法,getPeer()已经被isDisplayable()所取代,但这并不能满足您的需求。显然,访问像你这样的同龄人是违反规范的(更多信息,请查看here )。

如果你必须拥有ID,那么你需要另一种方法来获得它,因为正如我前面提到的,getPeer()甚至还没有被一些具有类似功能的方法所取代,它现在实际上已经变成了“私有”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5233445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档