国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JDK1.3 中的本地繪制支持

2019-11-18 14:04:47
字體:
來源:轉載
供稿:網友

  在 JDK1.3 出現以前,您僅能將 java 本地接口用于非用戶界面的工作。JDK 1.3 引入了新的 Java 2 AWT 本地接口,這使您可以在 Java 程序中使用非 Java 的 GUI 組件,盡管這樣做會失去純 Java 解決方案的可移植性。在使用 J2AWT 時,您必須針對要使用它的每個平臺制作本地動態連接庫或共享庫。

下面這段話摘自 JDK1.3 的某個頭文件,它說明了這種新的 API 的開發背景及原因:

AWT 支持使用本地 C 或 C++ 應用程序訪問 AWT 的本地結構。這是為了便于將原有的 C 或 C++ 應用程序移植到 Java 并滿足需要 ... [這些應用程序] 出于性能方面的原因在畫布上自行進行本地繪制

在 JDK1.3 以前,Java 編程沒有明確的方法來訪問基層的同等 GUI 組件的句柄。在 JDK 1.3 中, Sun 公司創建了一種標準機制,通過這種機制,開發人員可以使本地 GUI 應用程序和庫在 Java AWT Canvas 對象中進行繪制。這意味著現在有一種正式的、有保證的方法來獲得支持這一功能的信息。當 JDK 1.3 與其他操作平臺對接時,所有的接口都提供相同的信息 -- 而不管使用的是什么系統。JDK 1.3 的 Windows 版本和 Solaris 版本是首先提供這種支持的實現。

Sun 公司引入這一功能組件有幾方面的原因。首先, JDK 1.3 使得人們可以將依靠第三方產品的復雜原有軟件移植到 Java 上,而不必等到第三方產品本身完成移植以后。第二個原因即性能;假如本地的 GUI 代碼經過人們長時期的努力得到優化,則原樣保留這些軟件具有重要的商業價值。

在本文中,我將介紹一些該功能部件的基本概念。我將逐步開發一個窗口小部件樣例,該窗口小部件使用Win32 API 進行繪制。下圖是最終的窗口小部件的快照,一個帶有笑臉的圓形窗口。

分步概覽
第一步,定義一個 Java 類 -- 比如說,Mywindow -- 使其繼續 Canvas 類并重載 paint 方法。您使用 paint 方法執行 AWT 對象的繪制操作,并在覆蓋該方法時加上 native 要害字。覆蓋方法使您能夠使用自己的本地代碼。您必須構建自己的本地代碼并把它編譯成一個動態連接庫,就像我們處理其他的 Java 本地接口應用程序一樣,在本例中,我們將調用 MyWindow.DLL 庫。在 Solaris 和 linux 上則為共享對象或共享庫。您還需要用 System.loadLibrary("MyWindow") 調用將 MyWindow.DLL 庫加載到您的名為 MyWindow 的 Java 類中。

完成這一示例需要二個部分:其一是 MyWindow.Java ,它提供 Canvas 類的子類,其二是 MyWindow.CPP ,它包含基于 Java 本地接口的繪制子程序的入口點。 在參考資源部分可找到 MyWindow.JavaMyWindow.CPP 及自動執行編譯的批處理文件 BUILD.BAT

第一步: 創建 MyWindow Java 類
J2AWT 用于這種方法時有一個主要的局限性:本地代碼只能對 java.awt.Canvas 類的子類進行操作。這正是 MyWindow 繼續 Canvas 類的原因。在 Java 應用程序中,您可以像使用 Canvas 的其它子類那樣使用 MyWindow;在本例中,我將 MyWindow 添加到 Jwindow 中。

import java.awt.*;
import javax.swing.*;

public class MyWindow extends Canvas {
        static {
                //加載包含 paint 代碼的庫。
                System.loadLibrary("MyWindow");
        }

        //繪制操作的本地入口點
        public native void paint(Graphics g);

        public static void main( String[] argv ){
                Frame f = new Frame();
                f.setSize(300,400);

                JWindow w = new JWindow(f);
                w.setBackground(new Color(0,0,0,255));
                w.getContentPane().setBackground(new Color(0,0,0,255));
                w.getContentPane().add(new MyWindow());
                w.setBounds(300,300,300,300);
                w.setVisible(true);
        }
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荔浦县| 山阳县| 凤山市| 灵武市| 巴南区| 奎屯市| 邹平县| 清苑县| 开江县| 三原县| 南漳县| 奉节县| 武威市| 沽源县| 丽水市| 湘阴县| 阳山县| 尉氏县| 莆田市| 黄骅市| 密云县| 宾阳县| 三穗县| 新干县| 闸北区| 田阳县| 双江| 宁都县| 宁远县| 峨山| 托克托县| 惠州市| 台前县| 从化市| 桂林市| 喀喇| 淮南市| 深圳市| 宝丰县| 衡阳市| 兴国县|