AIR2.0入门教程:与Java应用交互
在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++
的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的应用是可以和任何语言编写的本地进程进行交互的。在今天的例子中,我们将学习如何和
Java编写的本地进程(.jar文件)进行交互。
上一篇教程的地址:AIR2.0入门教程[三]:与本地进程的数据通讯
注:这篇文章所涉及的源码和示例来自于Mihai的一篇文章
。
回顾
在AIR2.0中,我们可以使用NativeProcess
和NativeProcessInfo
这两个类,来启动一个可执行文件。当进程启动后,你就可以使用标准输入和标准输入来与进程通讯。
结合Java
首先,你可以下载示例项目
,这个项目包含了两个部分:
AIR部分:是一个基于Flex4
Framework的AIR项目,实现了用户界面(UI)部分的工作,界面包含两个窗口,如下图所示,右边的窗口是主窗口,你可以看到当前的帧频,然后你
还可以控制左侧的滚动条来放大和缩小右侧的图像。左边的窗口则用来显示遮盖区域的图像。
Java部分:控制定位到屏幕的特定区域,然后捕获截图,这个部分被AIR部分所控制。
示例截图:
你可以使用Flash Builder4,将下载的示例项目导入,编译运行看一下结果,注意这个项目使用了Flex4的Framework,而且有可能需要你修改SDK的配置,参见第一篇AIR2.0教程
。
在AIR部分的代码中,我们需要创建一个NativeProcess的实例来注册侦听标准输出事件。首先我们需要调用Java命令,启动我们的.jar文件,然后输入“take”命令来获取屏幕截图
1
:
private
var
nativeProcess:
NativeProcess;
2
:
private
var
npInfo:
NativeProcessStartupInfo;
3
:
//启动进程,并输入参数
4
:
var
arg:
Vector.<
String>
= new
Vector.<
String>
;
5
:
arg.push
(
"-jar"
)
;
6
:
arg.push
(
File.applicationDirectory.resolvePath(
"screenshot.jar"
)
.nativePath)
;
7
:
arg.push
(
"130"
)
;
8
:
arg.push
(
"100"
)
;
9
:
10
:
npInfo = new
NativeProcessStartupInfo(
)
;
11
:
//设置Java的路径
12
:
npInfo.executable = new
File(
"/Library/Java/Home/bin/java"
)
;
13
:
npInfo.arguments
= ar
相关文档:
先来了解一下链表模式的原理:
首先写一个JavaBean,内容是要添加的元素和该元素的节点。
public class NodeBean implements Serializable
{
private Object data; //元素本身
private NodeBean next; //下一个节点
&n ......
主线程中:
InitThread initThread=new InitThread(new Semaphore(0));//初始化一个子线程,传一个初值为0的信号量给它
Display.getDefault().asyncExec(initThread);
try {//此处会挂起,直到子线程完成工作,修改了信号量的值,主线程才会继续
initThread.getSemaphore().acquire();
} catch (Inte ......
第一次写这样的博客,感觉自己做的有点像笔记,不过本来就是笔记,我做笔记一般都是把本来不知道的,感觉有用的写下来,而且我也一般用与老师接近的语句写下来,避免自己的误解导致错误。
这次我看了《传智播客_张孝祥_Java基础1_Java开发前奏》这个课程。
1.老师说JAVA的第一个特点是”一次编译,到处运行“, ......
/*作用:用户输入自己的名字,显示一句问候语。
时间:2010年4月20日。
作者:enfang.
*/
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class KeyboardReader //作用:从键盘读入数据
{
private BufferedReader reader;
& ......
// 整数到字节数组转换
public static byte[] int2bytes(int n) {
byte[] ab = new byte[4];
ab[0] = (byte) (0xff & n);
ab[1] = (byte) ((0xff00 & n) >> 8);
ab[2] = (byte) ((0xff0000 & n) >> 16);
ab[3] = (byte) ((0xff000000 & n) >> 24);
return ab ......