一种java应用中加载图片的方法和装置转让专利

申请号 : CN200910110103.2

文献号 : CN101729753B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡华涛

申请人 : 深圳市同洲电子股份有限公司

摘要 :

本发明提供了一种java应用中加载图片的方法,java层获取存储jar应用包的绝对路径;java层将获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层中;C语言底层获取到存储所述jar应用包的绝对路径后,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中;C语言底层调用图形引擎,根据所述图片的二进制数据构造出图片并解码显示。对应的,本发明还提供了一种java应用中加载图片的装置,减轻了开发机顶盒应用人员工作的同时,实现了高效加载图片,提高了效率。

权利要求 :

1.一种java应用中加载图片的方法,用于机顶盒中间件中,其特征在于,包括:Java层获取存储jar应用包的绝对路径;

Java层将获取到的所述存储jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层中;

C语言底层获取到存储所述jar应用包的绝对路径后,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中;

C语言底层调用图形引擎,根据所述图片的二进制数据构造出图片并解码显示。

2.如权利要求1所述的方法,其特征在于,所述java层获取存储jar应用包的绝对路径步骤具体包括:获取调用getImage方法的类;

根据所述获取到的getImage方法的类,获取加载jar应用包的类加载器;

通过所述类加载器获取存储所述jar应用包的绝对路径。

3.如权利要求2所述的方法,其特征在于,所述获取调用getImage方法的类包括:通过native方法获取调用getImage方法的类,所述native方法是getImage方法中的实现获取调用类的方法。

4.如权利要求2所述的方法,其特征在于,所述Java层将所述存储jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层包括:通过native方法将所述存储jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层中,所述native方法是一种java和C语言互相调用的方法。

5.如权利要求3或4所述的方法,其特征在于,在所述获取调用getImage方法的类步骤前,还包括:从网络端下载所述jar应用包并保存在机顶盒设备中。

6.一种java应用中加载图片的装置,用于机顶盒中间件中,其特征在于,包括获取单元,路径传递单元,图片查找读取单元和解码显示单元,其中:所述获取单元,用于获取存储jar应用包的绝对路径;

所述路径传递单元与所述图片查找读取单元相连,用于将所述获取单元获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到所述图片查找读取单元中;

所述图片查找读取单元,用于根据获取到的存储所述jar应用包的绝对路径,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中;

解码显示单元,用于调用图形引擎,将存储在所述图片查找读取单元的缓存中的图片的二进制数据构造出图片并解码显示。

7.如权利要求6所述的装置,其特征在于,所述获取单元包括:第一获取单元,用于获取调用getImage方法的类;

第二获取单元,根据所述第一获取单元获取到的getImage方法的类,获取加载jar应用包的类加载器;

第三获取单元,通过所述第二获取单元获取到的类加载器获取存储所述jar应用包的绝对路径。

8.如权利要求7所述的装置,其特征在于,所述第一获取单元包括:第一native单元,用于获取调用getImage方法的类。

9.如权利要求7所述的装置,其特征在于,所述路径传递单元包括:第二native单元,将所述获取单元获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到所述图片查找读取单元中,所述第二native单元是一种实现java和C语言互相调用的单元。

10.如权利要求8或9所述的装置,其特征在于,所述装置还包括:存储单元,用于存储从网络端下载的jar应用包。

说明书 :

一种java应用中加载图片的方法和装置

技术领域

[0001] 本发明涉及机顶盒领域,尤其涉及一种java应用中加载图片的方法和装置。

背景技术

[0002] 目前机顶盒上已经开始流行采用内嵌java虚拟机,java是一种编程语言,由sun公司发布,通过java语言开发机顶盒软件,尤其是机顶盒中间件,java编程有其独特的优势,如:平台无关性,安全性,丰富的功能完善的包,扩展性强等等,但在嵌入式上采用java也有一些劣势,特别是性能问题。比起传统的利用C语言开发的机顶盒软件,java在机顶盒上运行的效果要慢,我们这里举个例子,加载图片资源,传统的C语言开发,图片资源会被存储为二进制格式,C语言直接读取,进行必要的解码后就可以显示出来。
[0003] 而现在采用java加载图片,一般采用如下方式:java中awt包加载图片时,通过Toolkit.getDefaultToolkit().getImage(″image/background.jpg″)形式加载图片,其内部实现原理为:在当前的java程序运行时配置的classpath的image路径下查找图片,如果找到,则读取之。
[0004] 但这种方式支持的功能有限,当java应用程序导出成jar文件发布后,通过网络下载保存到本地机顶盒,再由机顶盒的应用管理器通过自定义的类加载器classloader加载运行时,图片无法正常加载显示,原因是这种方式只能在启动虚拟机时配置的类路径classpath目录下查找,不支持智能的在当前运行的jar应用包所在的路径中查找,所述jar是一种压缩文件包,通常是开发时要引用通用类,打成jar包便于存放管理。
[0005] 为了解决这些问题,现有的做法是重载getImage方法,将当前运行的jar应用包所在的绝对路径传入getImage方法,然后利用java的zip包提供的功能从对应的jar应用包中读取图片数据,然后再通过native方法传到C语言底层中去构造图片,最后显示出来。
[0006] 发明人在实施过程中发现上述现有解决方案存在两方面缺点,首先现有解决方案通过java方法把图片数据读取到java层,然后又通过native把数据传递到C层,不仅浪费时间,而且浪费内存;其次现有解决方案没有解决如何获取到当前jar应用包在机顶盒中的绝对路径,仍然不支持加载一个从网络上下载下来的jar应用包中的图片,如果需要支持加载jar应用包中的图片,则需要java的开发人员和机顶盒应用管理器的开发人员事先协商,非常不方便。

发明内容

[0007] 鉴于上述现有技术所存在的问题,本发明实施例提供了一种java应用中加载图片的方法和装置,通过获取存储jar应用包的绝对路径,直接在C语言底层解压并找到需要加载的图片,减轻了机顶盒开发人员工作的同时,实现了高效加载图片,提高了效率。
[0008] 为了解决现有技术存在的问题,本发明实施例提供了一种java应用中加载图片的方法,用于机顶盒中间件中,包括:
[0009] Java层获取存储jar应用包的绝对路径;
[0010] Java层将获取到的所述存储jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层中;
[0011] C语言底层获取到存储所述jar应用包的绝对路径后,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中;
[0012] C语言底层调用图形引擎,根据所述图片的二进制数据构造出图片并解码显示。
[0013] 相应的,本发明实施例还提供了一种广告系统,用于机顶盒中间件,包括获取单元,路径传递单元,图片查找读取单元和解码显示单元,其中:
[0014] 所述获取单元,用于获取存储jar应用包的绝对路径;
[0015] 所述路径传递单元与所述图片查找读取单元相连,用于将所述获取模块获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到所述图片查找读取单元中;
[0016] 所述图片查找读取单元,用于根据获取到的存储所述jar应用包的绝对路径,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中;
[0017] 解码显示单元,用于调用图形引擎,将存储在所述图片查找读取单元的缓存中的图片的二进制数据构造出图片并解码显示。
[0018] 实施本发明实施例,通过java层获取存储jar应用包的绝对路径;java层将获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层中;C语言底层获取到存储所述jar应用包的绝对路径后,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中;C语言底层调用图形引擎,根据所述图片的二进制数据构造出图片并解码显示,减轻了开发机顶盒应用人员工作的同时,实现了高效加载图片,提高了效率。

附图说明

[0019] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0020] 图1是本发明实施例java应用中加载图片的方法的一流程示意图;
[0021] 图2是本发明实施例java应用中加载图片的方法的另一流程示意图;
[0022] 图3是本发明实施例java应用中加载图片的装置的结构示意图;
[0023] 图4是图3装置中获取单元的结构示意图;
[0024] 图5是图4中第一获取单元的结构示意图;
[0025] 图6是图3中路径传递单元的结构示意图。

具体实施方式

[0026] 本发明实施例提供了一种java应用中加载图片的方法和装置,通过获取存储jar应用包的绝对路径,直接在C语言底层解压并找到需要加载的图片,减轻了开发机顶盒应用人员工作的同时,实现了高效加载图片,提高了效率。
[0027] 机顶盒中采用内嵌java虚拟机,通过java语言开发机顶盒软件,尤其是机顶盒中间件时,首先在本地机顶盒内嵌一个java虚拟机,在虚拟机之上部署好一个java应用管理器,当应用管理器从网络上下载一个jar应用包形式的应用后,例如:music.jar(音乐播放软件),保存在机顶盒存储设备中,假设路径为:/flash/music.jar。
[0028] 当需要启动该应用(即该音乐播放软件)时,应用平台需要进行以下步骤:首先创建一个URL类加载器(URLClassLoader)加载这个应用,将该应用所在的路径/flash/music.jar传入URLCloassLoader;然后由应用管理器找到music.jar中的入口类并启动该音乐播放应用。
[0029] 开发人员在开发music.jar这个应用时,界面上如果需要显示一张图片,仍然按照最常用的方式编写代码,如Toolkit.getDefaultToolkit().getImage(″image/background.jpg″),这表明需要在当前jar应用包中查找image/background.jpg这个图片并加载;本发明实施例通过改造机顶盒内嵌的虚拟机,主要修改getImage方法,使其能自动识别出当前运行的jar应用包是从哪个路径下加载运行的。所述getImage方法指加载图片的方法,为Toolkit类的方法,用于加载图片;所述Toolkit为标准的java类。
[0030] 下面结合附图详细说明本发明的优选实施例。
[0031] 参见图1,为本发明实施例java应用中加载图片的方法的一流程示意图,包括:
[0032] 步骤101:Java层获取存储jar应用包的绝对路径;
[0033] 具体的,在步骤101之前还包括从网络端下载所述jar应用包并保存在机顶盒存储设备中,所述网络端的jar应用包是开放人员新建一个java工程,在java路径中通过相对路径加载图片,导出并存放在网络服务器端的jar应用包。假设开发人员在开发music.jar这个应用时,界面上需要显示一张图片,则开发人员可以按照最常用的方法编写代码,如:Toolkit.getDefaultToolkit().getImage(″image/background.jpg″),这表明需要在当前jar应用包中查找image/background.jpg这个图片并加载,将这个应用打包放在网络服务器端,供机顶盒应用管理者下载。
[0034] 步骤101中Java层获取存储jar应用包的绝对路径具体包括如下步骤:
[0035] A:获取调用getImage方法的类,所述getImage方法指加载图片方法,getImage是Toolkit类中的方法,用于加载图片,所述Toolkit是标准的java类,本步骤是通过在getImage方法中新增一个native方法,专门用来获取调用getImage的类,所述native方法是一种java和C语言互相调用的方法。
[0036] B:根据所述获取到的getImage方法的类,获取加载jar应用包的类加载器classloader;所述获取到的getImage方法的类就是music.jar中的某个类,通过getclassloader的方法获取加载music.jar的classloader。
[0037] C:通过所述类加载器获取存储所述jar应用包的绝对路径,接上述例子,就为通过所述类加载器classloader获取存储所述music.jar应用包的绝对路径,假设该绝对路径为(/flash/music.jar)。
[0038] 步骤102:java层将获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层中;
[0039] 所述将存储所述jar应用包的绝对路径(/flash/music.jar)和jar应用包中预先写入的需要加载的图片的相对路径(image/background.jpg)传到C语言底层中,是通过native方法将上述两路径传到C语言底层中的。值得注意的是本步骤所述native方法与步骤101中的A步骤中所示的native方法为不同的方法,两者用途不一样,但从广义功能上讲均为一种java语言和C语言互相调用的方法,因此在java语言中统称为native方法。
[0040] 步骤103:C语言底层获取到存储所述jar应用包的绝对路径(/flash/music.jar)后,调用zip算法解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径(image/background.jpg)找到对应图片,读出所述图片的二进制数据到一个缓存中;
[0041] 步骤104:C语言底层调用图形引擎,从所述图片的二进制数据中构造出图片并解码显示。该步骤中,根据所述图片的二进制数据构造出图片并解码,解码出来的图片用于显示。
[0042] 参见图2,为本发明实施例java应用中加载图片的方法的另一流程示意图。
[0043] 该流程示意图是结合网络服务器端和机顶盒终端来描述的流程。
[0044] 首先在网络服务器端,开发人员新建一个java应用工程,如xlet,java应用中通过相对路径加载图片,最后导出jar格式的jar应用包,存放在服务器端,供下载。
[0045] 在机顶盒终端,机顶盒java应用管理器通过网络下载存放在服务器端的jar应用包,并存储到机顶盒中,通过一个自定义的classloader加载jar应用包。
[0046] 当jar应用包下载并存储到机顶盒中后,机顶盒终端加载jar应用包中的图片包括如下步骤:
[0047] 步骤201:通过native方法获取调用getImage方法的类,所述native方法是getImage方法中的实现获取调用类的方法;
[0048] 步骤202:根据所述获取到的getImage方法的类,获取加载jar应用包的类加载器classloader;
[0049] 步骤203:通过所述加载jar应用包的classloader,获取存储所述jar应用包的绝对路径;
[0050] 步骤204:java层将获取到的所述存储jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径通过native方法传到C语言底层中,所述native方法是一种java和C语言互相调用的方法;
[0051] 步骤205:C语言底层获取到存储所述jar应用包的绝对路径后,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中;
[0052] 步骤206:C语言底层调用图形引擎,根据所述图片的二进制数据构造出图片并解码显示。
[0053] 实施本发明实施例java应用中加载图片的方法,通过获取存储jar应用包的绝对路径,将所述获取到的存储jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层中,在C语言底层中对jar包进行解压处理,实现了高效加载图片,提高了效率,同时,减轻了开发人员的工作,不再需要jar应用包开发人员同机顶盒管理人员协商路径问题。
[0054] 上面详细介绍了本发明实施例中java应用中加载图片的方法的流程,下面将结合图3描述本发明实施例中java应用中加载图片的装置的结构。
[0055] 参见图3,为本发明实施例java应用中加载图片的装置的结构示意图,包括:获取单元1,路径传递单元2,图片查找读取单元3和解码显示单元4,其中:
[0056] 所述获取单元1,用于获取存储jar应用包的绝对路径;
[0057] 具体的,参见图4,为所述获取单元1的结构示意图,包括:
[0058] 第一获取单元11,用于获取调用getImage方法的类,所述getImage方法指加载图片的方法;参见图5,为所述第一获取单元11的结构示意图,包括:第一native单元111,用于获取调用加载图片getImage方法的类,所述native单元111是一种实现java和C语言互相调用的单元。
[0059] 第二获取单元12,根据所述第一获取单元11获取到的getImage方法的类,获取加载jar应用包的类加载器classloader;
[0060] 第三获取单元13,通过所述第二获取单元12获取到的类加载器classloader获取存储所述jar应用包的绝对路径。
[0061] 所述路径传递单元2与所述图片查找读取单元3相连,用于将所述获取模块1获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到所述图片查找读取单元3中;参见图6,为所述路径传递单元的结构示意图,包括:第二native单元21,用于将所述获取模块1获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到所述图片查找读取单元3中。
[0062] 所述图片查找读取单元3,用于根据获取到的存储所述jar应用包的绝对路径,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中;
[0063] 解码显示单元4,用于调用图形引擎,将存储在所述图片查找读取单元的缓存中的图片的二进制数据构造出图片并解码显示。
[0064] 所述java应用中加载图片的装置还包括:
[0065] 存储单元5,用于存储从网络端下载的jar应用包。所述jar应用包是网络端开放人员新建一个java工程(例如xlet),在java路径中通过相对路径加载图片,导出java包存放在服务器端的java应用包。假设开发人员在开发music.jar这个应用时,界面上需要显示一张图片,则按照最常用的方法编写代码,如:Toolkit.getDefaultToolkit().getImage(″image/background.jpg″),这表明需要在当前jar应用包中查找image/background.jpg这个图片并加载,将这个应用打包放在网络服务器端,供机顶盒应用管理者下载。
[0066] 现有技术中,从网络上下载一个java应用(打包成jar形式)到本地机顶盒,由于现有技术没有解决如何在获取当前jar应用包在机顶盒中的绝对路径,应用管理器通过自定义的classloader加载这个应用,需要应用中先写好当前应用的路径,这需要开发java应用的开发人员和机顶盒应用管理器的开发人员事先协商路径,非常不方便,而且采用现有的java方法从机顶盒存储设备(如FLASH)的jar应用包中读取图片数据到java层,然后再传回到C层进行解码显示的方式加载、显示图片速度非常慢,浪费了时间,降低了效率。本发明实施例与现有技术的区别在于,本发明实施例中通过改造机顶盒内嵌的虚拟机,主要通过修改getImage方法,在getImage方法中新增native方法的方式,能获取到当前jar应用包在机顶盒中的绝对路径,减轻了开发机顶盒java应用的开发人员的工作,其开发java应用仍然按照以前的习惯,不用考虑这个应用最终会存放在哪里应用,加载图片和在本地PC机运行效果一样,且大大减少了jar应用包应用加载图片过程中的数据拷贝,加快了机顶盒上加载jar应用包中的图片的显示速度,特别是当jar应用包采用压缩形式时,此方法由于在C语言底层解压,更能体现出效率性。
[0067] 本发明实施例通过java层获取存储jar应用包的绝对路径,并将获取到的存储所述jar应用包的绝对路径和jar应用包中预先写入的需要加载的图片的相对路径传到C语言底层中;C语言底层获取到存储所述jar应用包的绝对路径后,解压打开所述jar应用包,根据所述jar应用包中的需要加载的图片的相对路径找到对应图片,读出所述图片的二进制数据到缓存中,并调用图形引擎,根据所述图片的二进制数据构造出图片并解码显示,减轻了开发机顶盒应用人员工作的同时,实现了高效加载图片,提高了效率。
[0068] 以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
[0069] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。