在哪里可以找到有关AWT如何与本机操作系统交互的详细信息?

时间:2012-02-17 01:16:03

标签: java user-interface jvm awt native

我一直在寻找有关AWT包基本原理的详细信息。具体来说,它如何与主机操作系统进行本机交互以创建Windows及其内容。

有人能指出我这种文件或提供任何其他信息吗?

5 个答案:

答案 0 :(得分:5)

OpenJDK source是要走的路。你只需要点击正确的文件夹。你可以看到这样的内部代码:

checkbox = new AwtCheckbox();
...
checkbox->CreateHWnd(env, labelStr, style, exStyle,
         x, y, width, height,
         awtParent->GetHWnd(),
         reinterpret_cast<HMENU>(static_cast<INT_PTR>(
     awtParent->CreateControlID())),
         ::GetSysColor(COLOR_WINDOWTEXT),
         ::GetSysColor(COLOR_BTNFACE),
         peer);

CreateHWnd函数可以在awt_Component.cpp文件中找到,它调用CreateWindowEx函数。

答案 1 :(得分:4)

<强>基本
C ++中的大多数GUI类库都是特定于平台的,不仅仅是因为硬件功能不同,     但各种Windowing操作系统的“外观和感觉”之间存在细微差别。 Java Abstract Window Toolkit提供了一个跨平台的库         旨在观察各种操作系统平台的外观惯例。

            Toolkit ------------------------------------------------ AWT
       --------|---------
   Button               List                                         JVM
  ------|-------------|--------------------------------------------------
  Button Peer     List Peer                       Native GUI (Windows, Mac, X) 

有关Java GUI Event Programming

的更多信息

AWT 提供两个级别的API:

  • Java与本机系统之间的通用接口,用于窗口,事件和布局管理器。该API是Java GUI编程的核心,也被Swing和Java 2D使用。它包含:

    1. 本机窗口系统和Java应用程序之间的接口;
    2. GUI事件子系统的核心;
    3. 多个布局管理器;
    4. 输入设备(如鼠标和键盘)的界面;

    5. 用于剪贴板和拖放的java.awt.datatransfer包。
  • 一组基本的GUI小部件,例如按钮,文本框和菜单。
    它还提供了AWT Native Interface,它使得编译为本机代码的库能够直接绘制到AWT Canvas对象绘图表面。

AWT还为应用程序提供了一些更高级别的功能,例如:
访问支持系统上的系统托盘;和     能够从Java应用程序启动某些桌面应用程序,如Web浏览器和电子邮件客户端 要获取Native OpenJDK AWT类的源代码,请使用以下链接

  

jdk6/jdk6-gate/jdk/src/windows/native/sun/
  jdk6/jdk6-gate/jdk/src/windows/native/sun/windows/(Windows-AWT-Native类)。

<强>的OpenJDK (GPL)

  • Sun在2006年宣布Java将成为开源软件。
  • 于2007年5月8日在GPL下发布了Java类库的完整源代码,
  • 2010年10月11日,IBM是Apache Harmony项目的最大参与者,决定加入Oracle的OpenJDK项目,有效地将其努力从Harmony转移到OpenJDK。
  • 2011年1月11日,Mac OS X端口项目在OpenJDK上创建,Apple首次公开贡献了该项目的代码。最初的Apple贡献基于OpenJDK BSD端口(OpenJDK™ 6 Source Release)。

<强>参考:

[OpenJDK Repositories。]

  

Open jdk6/jdk6-gate/jdk/src/share/classes/java/awt/(示例AWT包源代码)

OpenJDK project,基于JDK 7

您可以找到OpenJDK功能here

Caciocavallo,Project提供基于OpenJDK的Java API,以简化新系统上的AWT实现。该项目使用Java2D成功实现了AWT小部件。
[OpenJDK Mailing list。]

阅读AWT Documentation以获得有关其实施的清晰知识。

awt-dev Mailing Lists参与其中。

答案 2 :(得分:2)

这是一个实现细节。事实上的标准是Oracle如何实现它。如果你真的想知道,那么看看源代码。它可以在http://openjdk.java.net/找到。链接位于搜索框下方的左列中。相关的类应该在sun.awt包中。

答案 3 :(得分:1)

那么有pdf(如下所述)....但对我来说这很难理解。但它可能对你有帮助。

How Java Programs Interact with Virtual Machines at the Microarchitectural Level.

答案 4 :(得分:-2)

Awt使用native方法完成此操作。这些是java方法,它们在单独的文件中引用本机语言中的方法。所以基本上如果你使用的是Windows而你想打开一个窗口,java将使用C ++来打开窗口。

http://en.wikipedia.org/wiki/Java_Native_Interface

http://en.wikipedia.org/wiki/Java_AWT_Native_Interface