日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

air调用java,AIR2.0入门教程:与Java应用交互

發(fā)布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 air调用java,AIR2.0入门教程:与Java应用交互 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在之前的一篇文章中,我介紹了如何使用AIR2.0新增的NativeProcess類與本地進程進行交互和通訊,在那個例子里面我們使用了C++ 的代碼,實際上只要是基于命令行的標準輸入輸出,AIR2.0的應用是可以和任何語言編寫的本地進程進行交互的。在今天的例子中,我們將學習如何和 Java編寫的本地進程(.jar文件)進行交互。

上一篇教程的地址:AIR2.0入門教程[三]:與本地進程的數據通訊

注:這篇文章所涉及的源碼和示例來自于Mihai的一篇文章 。

回顧

在AIR2.0中,我們可以使用NativeProcess 和NativeProcessInfo 這兩個類,來啟動一個可執(zhí)行文件。當進程啟動后,你就可以使用標準輸入和標準輸入來與進程通訊。

結合Java

首先,你可以下載示例項目 ,這個項目包含了兩個部分:

AIR部分:是一個基于Flex4 Framework的AIR項目,實現(xiàn)了用戶界面(UI)部分的工作,界面包含兩個窗口,如下圖所示,右邊的窗口是主窗口,你可以看到當前的幀頻,然后你 還可以控制左側的滾動條來放大和縮小右側的圖像。左邊的窗口則用來顯示遮蓋區(qū)域的圖像。

Java部分:控制定位到屏幕的特定區(qū)域,然后捕獲截圖,這個部分被AIR部分所控制。

示例截圖:

你可以使用Flash Builder4,將下載的示例項目導入,編譯運行看一下結果,注意這個項目使用了Flex4的Framework,而且有可能需要你修改SDK的配置,參見第一篇AIR2.0教程 。

在AIR部分的代碼中,我們需要創(chuàng)建一個NativeProcess的實例來注冊偵聽標準輸出事件。首先我們需要調用Java命令,啟動我們的.jar文件,然后輸入“take”命令來獲取屏幕截圖

private var nativeProcess:NativeProcess;

private var npInfo:NativeProcessStartupInfo;

//啟動進程,并輸入參數

var arg:Vector.= new Vector.;

arg.push("-jar");

arg.push(File.applicationDirectory.resolvePath("screenshot.jar").nativePath);

arg.push("130");

arg.push("100");

npInfo = new NativeProcessStartupInfo();

//設置Java的路徑

npInfo.executable = new File("/Library/Java/Home/bin/java");

npInfo.arguments = arg;

nativeProcess = new NativeProcess();

nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onStandardOutputData);

//start the process

nativeProcess.start(npInfo);

/**

* 從標準輸出流中讀取數據

* 在讀取PNG之前,首先需要讀取圖片的尺寸

*/

private function onStandardOutputData(e:ProgressEvent):void

{

//reading the available bytes from the standard output buffer of the process

nativeProcess.standardOutput.readBytes(_processBuffer, _processBuffer.length, ??? nativeProcess.standardOutput.bytesAvailable);

...

}

//向Java進程發(fā)送take命令

nativeProcess.standardInput.writeMultiByte("take/n", "utf-8");

下面的部分是Java代碼,你可以看到,它執(zhí)行截取屏幕的工作,然后輸出字節(jié)數組,AIR部分將會把字節(jié)數組還原為圖片并顯示出來:

package org.corlan;

import java.awt.AWTException;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.image.BufferedImage;

import java.io.BufferedReader;

import java.io.ByteArrayOutputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import javax.imageio.ImageIO;

public class ScreenShot {

private static int width = 130;

private static int height = 110;

private static int x = 50;

private static int y = 50;

private Robot robot;

/**

* 要創(chuàng)建的圖片的類型,可以是PNG,GIF或其它

*/

private String imageType = "png";

/**

* @param 捕捉屏幕寬度

* @param 捕捉屏幕高度

* @param args

*/

public static void main(String[] args) {

if (args.length == 2) {

width = Integer.parseInt(args[0]);

height = Integer.parseInt(args[1]);

}

ScreenShot s = new ScreenShot();

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

String text = "";

String[] tokens;

while (true) {

try {

text = in.readLine();

if (text.equals("take")) {

s.capturePortion(x, y, width, height);

} else if (text.equals("terminate")) {

return;

} else if (text.length() > 0) {

tokens = text.split("//|");

if (tokens.length < 4)

continue;

x = Integer.parseInt(tokens[0]);

y = Integer.parseInt(tokens[1]);

width = Integer.parseInt(tokens[2]);

height = Integer.parseInt(tokens[3]);

}

} catch (IOException e) {

System.err.println("Exception while reading the input. " + e);

}

}

}

/**

* 獲取屏幕某個區(qū)域的截圖

*/

public void capturePortion(int x, int y, int w, int h) {

try {

if (robot == null)

robot = new Robot();

BufferedImage img = robot.createScreenCapture(new Rectangle(x, y, w, h));

ByteArrayOutputStream output = new ByteArrayOutputStream();

ImageIO.write(img, imageType, output);

DataOutputStream dataOutputStream = new DataOutputStream(System.out);

//輸出流的長度

dataOutputStream.writeInt(output.size());

//輸出流

dataOutputStream.write(output.toByteArray());

dataOutputStream.flush();

output.close();

} catch (AWTException e) {

System.err.println("Exception while capturing screen. " + e);

} catch (IOException e) {

System.err.println("Exception while writting the image bytes. " + e);

}

}

}

通過上面的代碼,你已經了解了如何將Java進程與AIR應用相結合,接下來就是打包你的AIR應用為本地可執(zhí)行文件,這樣才具備與本地進程通訊的權限,詳情請參閱上一篇教程:

總結

以上是生活随笔為你收集整理的air调用java,AIR2.0入门教程:与Java应用交互的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。