CN102375740A - 手持装置及利用其实现Java组件与自定义构件互操作的方法 - Google Patents

手持装置及利用其实现Java组件与自定义构件互操作的方法 Download PDF

Info

Publication number
CN102375740A
CN102375740A CN2010102653841A CN201010265384A CN102375740A CN 102375740 A CN102375740 A CN 102375740A CN 2010102653841 A CN2010102653841 A CN 2010102653841A CN 201010265384 A CN201010265384 A CN 201010265384A CN 102375740 A CN102375740 A CN 102375740A
Authority
CN
China
Prior art keywords
self
defining structure
java
class
assembly
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2010102653841A
Other languages
English (en)
Inventor
裴喜龙
陈榕
周毅敏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Original Assignee
KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI filed Critical KETAI CENTURY SCIENCE AND TECHNOLOGY Co Ltd SHANGHAI
Priority to CN2010102653841A priority Critical patent/CN102375740A/zh
Publication of CN102375740A publication Critical patent/CN102375740A/zh
Pending legal-status Critical Current

Links

Images

Abstract

一种手持装置及利用其实现Java组件与自定义构件互操作的方法,该方法包括如下步骤:读取自定义构件属性以获取自定义构件名称,并发起加载自定义构件的调用;获取所有自定义构件中的每一个类信息和方法信息,并将该自定义构件中的类和方法与Java虚拟机中的类和静态方法一一对应;根据自定义构件生成Java源代码文件;将上述生成的Java源代码文件与预先编辑的项目文件一同参与编译;如果Java组件对自定义构件的方法调用中有输入参数或返回值,则进行Java组件和自定义构件之间的参数类型的相互转换。利用本发明可实现Java组件与自定义构件的互操作。

Description

手持装置及利用其实现Java组件与自定义构件互操作的方法
技术领域
本发明涉及一种电子装置及方法,尤其涉及一种手持装置及利用其实现Java组件与自定义构件互操作的方法。
背景技术
Java技术自诞生以来经过十几年的发展,已经相当成熟,用途非常广泛,是所有编程语言和方法中最主流的技术之一。自其诞生以来就已在嵌入式设备上广泛使用。近年来,互联网巨头谷歌在其手机操作系统上完全地使用了它,使该技术更加深入地发展。Java技术拥有开发方便,一处编译随处运行,安全性高等优点。
构件(component)是可复用的软件组成成份,可被用来构造其他软件。它可以是被封装的对象类、类树、一些功能模块、软件框架(framework)、软件构架(或体系结构Architectural)、文档、分析件、设计模式(Pattern)等。开发者可以通过组装已有的构件来开发新的应用系统,从而达到软件复用的目的。软件构件技术是软件复用的关键因素,也是软件复用技术研究的重点。
但是,现有的手机系统没有同时结合Java技术与构件技术,使两者相互协作,以结合两者的优点,使应用程序运行效率更高,功能更全面。
发明内容
鉴于以上内容,有必要提供一种Java组件与自定义构件互操作的方法,其可建立一种编程模型使Java语言的程序能够直接调用自定义构件(如CAR构件)的功能,而自定义构件也能够调用Java程序。
在一个实施例中,该方法包括如下步骤:
Java虚拟机启动时读入自定义构件的动态链接库文件,读取自定义构件属性以获取自定义构件名称,并发起加载自定义构件的调用;
使用自定义构件的反射机制获取所有自定义构件中的每一个类信息和方法信息,并将该自定义构件中的类和方法与Java虚拟机中的类和静态方法一一对应;
调用Java源代码生成工具,根据自定义构件中的类和方法生成Java源代码文件;
将上述生成的Java源代码文件与预先编辑的项目文件一同参与编译;及
如果Java组件对自定义构件的方法调用中有输入参数或返回值,则进行Java组件和自定义构件之间的参数类型的相互转换。
前述方法可以由手持装置执行,其中该手持装置具有附带了图形用户界面(GUI)的触控式屏幕、一个或多个处理器、存储器以及保存在存储器中用于执行这些方法的一个或多个模块、程序或指令集。在某些实施例中,该手持装置提供了包括无线通信在内的多种功能。
用于执行前述方法的指令可以包含在被配置成由一个或多个处理器执行的计算机程序产品中。
相较于现有技术,所述的Java组件与自定义构件互操作的方法,通过建立一种编程模型,使Java语言的程序能够直接调用自定义构件(如CAR构件)的功能,而自定义构件也能够调用Java程序。从而使Java技术与构件技术相互协作,结合两者的优点,使应用程序运行效率更高,功能更全面,开发方便,一处编译随处运行,安全性高。
附图说明
图1是本发明手持装置较佳实施例的结构方框图。
图2是Java组件与CAR构件互操作的结构模型示意图。
图3是Java组件与CAR构件互操作方法的较佳实施例的流程图。
图4是Java参数类型转换成CAR构件参数类型的转换表。
图5是CAR构件参数类型转换成Java参数类型的转换表。
主要元件符号说明
Figure BSA00000246936800031
具体实施方式
本实施方式中以CAR构件作为自定义构件为例进行说明,可以理解,本领域技术人员也可以将该方法应用到其它自定义构件中,以实现其它自定义构件与Java组件的互操作。由于以下实施例中的描述涉及到CAR构件的概念,所以先解释一下本发明所述CAR构件的特点。
CAR(Component Application Runtime)是一个面向构件的编程模型,也可以说是一种编程思想,它表现为一组编程规范,包括构件、类、对象、接口等定义与访问构件对象的规定。CAR技术兼容微软的COM(Component Object Model,组件对象模型)构件技术。但是,和微软的COM相比,它删除了微软COM中过时的约定,禁止用户定义COM的非自描述接口,完备了构件及其接口的自描述功能,实现了对COM的扩展。同时也对COM的用户界面进行了简化包装,使得高深难懂的构件编程技术很容易被C/C++程序员理解并掌握。
CAR构件采用C/C++编写,携带元数据信息,元数据通过反射机制参与构件组装计算,生成的代码直接以目标平台的二进制代码运行,编译结果采用“.DLL”为规范的文件结尾格式,能够达到C/C++的运行效率。
如图1所示,是本发明手持装置较佳实施例的结构方框图。在本实施例中,该手持装置2包括存储器21、触控式屏幕22和处理器23。其中,所述存储器21中存储有Java组件与CAR构件互操作系统210。该Java组件与CAR构件互操作系统210用于实现Java组件与CAR构件的互操作,具体过程参见图2-5的描述。
在本实施例中,所述手持装置2包括,但不限于,手机或PDA(Personal Digital Assistant,个人数字助理)等具有资料处理功能的电子设备。所述触控式屏幕22用于对通过指示笔或手指而在一个或多个接触点进行的物理接触做出响应,并提供一个与用户进行交互的界面。
在本实施例中,所述Java组件与CAR构件互操作系统210可以被分割成一个或多个模块,所述一个或多个模块被配置成由一个或多个处理器(本实施例为一个处理器23)执行,以完成本发明。本发明所称的模块是完成一特定功能的计算机程序段,比程序更适合于描述软件在计算机中的执行过程。
本发明要解决的问题是建立一种编程模型使Java语言的程序能够直接调用CAR构件的功能,而CAR构件也能够调用Java程序。由于CAR构件的程序代码主要由C++实现,而Java与C++互操作使用的是JNI(JavaNative Interface,Java本地接口)机制。因此,Java组件与CAR构件互调主要也是通过JNI来实现。Java组件和CAR构件互操作的结构模型参阅图2所示。
如图3所示,是Java组件与CAR构件互操作方法的较佳实施例的流程图。
步骤S1,Java虚拟机启动时读入CAR构件的DLL(DynamicLink Library,动态链接库)文件,读取CAR构件属性以获取CAR构件名称,并发起加载CAR构件的调用。在本实施例中,多个CAR构件可以在一起,形成一个模组(Module)。
步骤S2,使用CAR构件的反射机制获取所有CAR构件中的每一个类信息和方法信息,并将该CAR构件中的类和方法与Java虚拟机中的类和静态方法一一对应。
步骤S3,调用Java源代码生成工具,根据CAR构件中的类和方法生成Java源代码文件。
步骤S4,将上述生成的Java源代码文件与预先编辑的项目文件一同参与编译。在本实施例中,所述项目文件为CAR构件架构下的一个应用程序,如打电话的应用程序。
步骤S5,如果Java组件对CAR构件的方法调用中有输入参数(或称in参数)或返回值(或称输出参数,out参数),则进行Java组件和CAR构件之间的参数类型的相互转换,具体转换关系参阅图4和图5所示。在本实施例中,Java组件对CAR构件自定义类中的方法的调用是通过对“生成类”的调用实现的。其中,“生成类”是由该CAR构件中的自定义类(CAR Class)组成的包装类。其中,图4是Java参数类型转换成CAR构件参数类型的转换表,图5是CAR构件参数类型转换成Java参数类型的转换表。
步骤S6,当CAR构件需要调用Java组件的类和方法时,CAR构件回调Java组件。可以理解,在CAR构件回调Java组件前,需要先配置CAR构件回调Java组件的初始化环境,然后寻找需要的类和调用需要的方法。
Java组件调用CAR构件时的回调也是一个麻烦的问题,但是可以有一个统一的解决方案,用C语言写一个统一的函数作为回调Java组件的接口,大致如下:
unifiedCarCallbackJava(JNIEnv*pEnv,WString className,WString methodName,WString signature size_t argumentCount,constjvalue arguments[])
{
jclass cls=pEnv->findClass(className);
jmethodID methodId=GetMethodID(cls,methodName,signature);
CallStaticVoidMethodA(cls,methodId,arguments);
}
以下用一个具体的例子进一步说明如何实现Java组件与CAR构件的互操作。
1.CAR构件:
构件名称:Foo.CAR
构件写法:
module
{
  interface IFoo
  {
   method1([in]Int32a);
   }
   interface IFooBar
   {
   method2([in]Int32a,[in]Int32b);
   }
   class CFoo
   {
   constructor();
   interface IFoo;
   callback interface IFooBar;
 }
}
2.自动生成的Java代码:
CarFoo.java:
//auto generated
public class CarFoo
{
  public native void method1(int a);
  public static void callbackMethod2(int a,int b)
  {
     //todo:add your codes here.
  }
}
3.在Java组件中CAR构件的加载与使用:
loadLibrary(“Foo.dll”);
CarFoo foo=new CarFoo();
foo.method1(...);
4.在CAR构件中回调Java组件:
unifiedCarCallbackJava(pEnv,”Foo”,”callbackMethod2”,2,{1,2});
5.CAR生成的代码中调用Java组件:
void main()
{
  JavaVMOption options[1];
  JNIEnv*env;
  JavaVM*jvm;
  JavaVMInitArgs vm_args;
  jclass cls;
  jmethodID mid;
  jfieldID fid;
  options[0].optionString=″-Djava.class.path=.″;
  vm_args.version=JNI_VERSION_1_4;
  vm_args.nOptions=1;
vm_args.options=options;
vm_args.ignoreUnrecognized=JNI_TRUE;
jint nRetStatus=JNI_CreateJavaVM(&jvm,(void**)&env,
&vm_args);
assert(JNI_ERR!=nRetStatus);
cls=env->FindClass(″Demo″);
......
jvm->DestroyJavaVM();
}
在本发明中,调用者和被调用者可以为任意实现的CAR构件也可为任意的Java程序,因此适用于所有Java组件和CAR构件的互操作情形。应用方式举例如下:比如Java代码可以调用封装了访问数据库的CAR构件,而不必通过效率较低的JDBC或其它的复杂程序逻辑。又比如通讯模块也可以封装为效率较高的CAR构件实现供Java应用程序调用。若存在已有的执行特定业务逻辑的Java应用程序,CAR构件就可以直接调用。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。

Claims (10)

1.一种Java组件与自定义构件互操作的方法,其特征在于,该方法包括如下步骤:
Java虚拟机启动时读入自定义构件的动态链接库文件,读取自定义构件属性以获取自定义构件名称,并发起加载自定义构件的调用;
使用自定义构件的反射机制获取所有自定义构件中的每一个类信息和方法信息,并将该自定义构件中的类和方法与Java虚拟机中的类和静态方法一一对应;
调用Java源代码生成工具,根据自定义构件中的类和方法生成Java源代码文件;
将上述生成的Java源代码文件与预先编辑的项目文件一同参与编译;及
如果Java组件对自定义构件的方法调用中有输入参数或返回值,则进行Java组件和自定义构件之间的参数类型的相互转换。
2.如权利要求1所述的Java组件与自定义构件互操作的方法,其特征在于,该方法还包括步骤:当CAR构件需要调用Java组件的类和方法时,自定义构件回调Java组件。
3.如权利要求1所述的Java组件与自定义构件互操作的方法,其特征在于,所述项目文件为自定义构件架构下的一个应用程序。
4.如权利要求1所述的Java组件与自定义构件互操作的方法,其特征在于,所述Java组件对自定义构件的方法的调用是通过对生成类的调用实现的。
5.如权利要求4所述的Java组件与自定义构件互操作的方法,其特征在于,所述生成类是由该自定义构件中的自定义类组成的包装类。
6.一种手持装置,包括:
触控式屏幕;
存储器;
一个或多个处理器;以及
一个或多个模块,所述一个或多个模块被存储在所述存储器中并被配置成由所述一个或多个处理器执行,所述一个或多个模块用于执行以下步骤:
Java虚拟机启动时读入自定义构件的动态链接库文件,读取自定义构件属性以获取自定义构件名称,并发起加载自定义构件的调用;
使用自定义构件的反射机制获取所有自定义构件中的每一个类信息和方法信息,并将该自定义构件中的类和方法与Java虚拟机中的类和静态方法一一对应;
调用Java源代码生成工具,根据自定义构件中的类和方法生成Java源代码文件;
将上述生成的Java源代码文件与预先编辑的项目文件一同参与编译;及
如果Java组件对自定义构件的方法调用中有输入参数或返回值,则进行Java组件和自定义构件之间的参数类型的相互转换。
7.如权利要求6所述的手持装置,其特征在于,所述一个或多个模块还用于执行以下步骤:当CAR构件需要调用Java组件的类和方法时,自定义构件回调Java组件。
8.如权利要求6所述的手持装置,其特征在于,所述项目文件为自定义构件架构下的一个应用程序。
9.如权利要求6所述的手持装置,其特征在于,所述Java组件对自定义构件的方法的调用是通过对生成类的调用实现的。
10.如权利要求9所述的手持装置,其特征在于,所述生成类是由该自定义构件中的自定义类组成的包装类。
CN2010102653841A 2010-08-26 2010-08-26 手持装置及利用其实现Java组件与自定义构件互操作的方法 Pending CN102375740A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102653841A CN102375740A (zh) 2010-08-26 2010-08-26 手持装置及利用其实现Java组件与自定义构件互操作的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102653841A CN102375740A (zh) 2010-08-26 2010-08-26 手持装置及利用其实现Java组件与自定义构件互操作的方法

Publications (1)

Publication Number Publication Date
CN102375740A true CN102375740A (zh) 2012-03-14

Family

ID=45794386

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102653841A Pending CN102375740A (zh) 2010-08-26 2010-08-26 手持装置及利用其实现Java组件与自定义构件互操作的方法

Country Status (1)

Country Link
CN (1) CN102375740A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108170408A (zh) * 2016-12-05 2018-06-15 北京国双科技有限公司 Js对象定义的生成方法及装置
CN109918157A (zh) * 2019-01-08 2019-06-21 北京航天飞行控制中心 操作处理方法和装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020199169A1 (en) * 2001-06-20 2002-12-26 Sun Microsystems, Inc. Representation of Java data types in virtual machines
CN101770360A (zh) * 2008-12-29 2010-07-07 上海科泰世纪科技有限公司 构件化软件系统中构件的继承方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020199169A1 (en) * 2001-06-20 2002-12-26 Sun Microsystems, Inc. Representation of Java data types in virtual machines
CN101770360A (zh) * 2008-12-29 2010-07-07 上海科泰世纪科技有限公司 构件化软件系统中构件的继承方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
蒋章概等: "《基于CAR构件的WebKit本地扩展策略》", 《计算机应用》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108170408A (zh) * 2016-12-05 2018-06-15 北京国双科技有限公司 Js对象定义的生成方法及装置
CN109918157A (zh) * 2019-01-08 2019-06-21 北京航天飞行控制中心 操作处理方法和装置
CN109918157B (zh) * 2019-01-08 2022-05-10 北京航天飞行控制中心 操作处理方法和装置

Similar Documents

Publication Publication Date Title
US7380242B2 (en) Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
US8191042B2 (en) Continuation based declarative definition and composition
US8756616B2 (en) System and method for reducing the static footprint of mixed-language JAVA classes
US9841953B2 (en) Pluggable components for runtime-image generation
CN110134378A (zh) 应用程序创建方法及装置、计算机设备及存储介质
CN102236621A (zh) 计算机接口信息配置系统及方法
Popp et al. Tool support for automated multi-device GUI generation from discourse-based communication models
CN102402427A (zh) 一种Java应用程序的更新方法及装置
US8141042B2 (en) Extending portability of java code through the use of AOP
JP2017146966A (ja) パッケージファイルに対する機能拡張方法およびシステム
CN101859244A (zh) 多工具链工程构建方法及系统
CN112650487B (zh) 混合应用程序开发方法、系统、计算机设备和存储介质
CN113805882A (zh) 应用程序开发的方法、装置、电子设备及存储介质
CN110333867B (zh) 一种多方安全计算数据处理方法、装置及系统
US8875089B2 (en) Workspace model for interrelated projects
Botturi et al. Model-driven design for the development of multi-platform smartphone applications
CN102375740A (zh) 手持装置及利用其实现Java组件与自定义构件互操作的方法
CN110018831B (zh) 程序处理方法、装置及计算机可读存储介质
US10795704B2 (en) Serialization of objects to java bytecode
CN111381816A (zh) 应用程序的获取方法、装置、设备及存储介质
Yang et al. Professional Microsoft Smartphone Programming
CN115390846A (zh) 编译构建方法、装置、电子设备和存储介质
CN115629795A (zh) 一种可执行文件的配置方法、装置及电子设备
CN106775608B (zh) 独立系统进程的实现方法和装置
CN113177292B (zh) 一种通用的bim二次开发实现方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1168430

Country of ref document: HK

C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20120314