Java 写桌面软件也可以小、轻、快

admin2021-11-29  395

 ​Jacen He

aardio 可以嵌入非常多的编程语言,Java 就是其中一个。可能我说 “Java 写桌面软件也可以小、轻、快” —— 很多人可能认为我在讲笑话。Java 虽然强大,但体积非常大,版本与安装方式也比较杂,用 Java 制作或者分发桌面软件,并不能算是很容易。

不过如果用 aardio Java 开发,解决这些问题就比较简单了,而且最近我大幅重构和改进了 aardio 的 Java 支持库 —— 用起来更方便了。用 aardio Java 可以生成体积极小的独立 EXE 文件,可以内存加载 Java 编写的 class 文件,用 aardio Java 生成的软件,发布时不需要携带 Java 运行时。

aardio 提供了强大的 Java 运行时自动探测与自动部署功能,aardio 会运用各种检测方式查找电脑上可用的 Java 运行时 —— 这大多时候是能找到的,如果没有找到可用的运行时,aardio 也可以快速地自动下载并且准备好 Java 运行时,这完全不需要多写任何代码,一切都是全自动地完成。

当然,如果你希望自带 Java 运行时,或者指定 JRE 的版本,aardio 也提供了非常多用于实现这些需求的库,例如运行

import java.jre.v8ora


 就可以自动绑定 Oracle Java 8 运行时,软件运行会自动查找用户电脑上符合要求的JRE,如果没有找到会全自动地安装和部署好,开发者要做的,仅仅就是写几句代码,把 EXE 简单地分发给用户就可以了。

当然,也可以自带 JRE,aardio 里提供了一个示例 JRE,只要简单的在代码中加入

import java.jre.v6


,就可以在软件中嵌入一个精简版的 JRE 6 运行时,这个 JRE 只有6MB多一点,而且可以生成独立 EXE 文件,甚至还能支持 Windows XP 这种古老的系统。Java 写的桌面软件带上运行时只有 6 MB,而且还是独立 EXE 文 件,是不是难以置信?!想一想 Electron 写一点小功能就五六百 MB 的体积,Java 写的桌面软件算不算得上小、轻、快呢?!

现代 Java 已经可以非常方便地生成精简版的JRE,所以你只要参考 java.jre.v6 的实现( 放心这个库的源代码只有几行 ),就可以非常轻松地更换 JRE 版本,并生成极小的 EXE文件( 而且可以是独立的 EXE文件)。

好吧,我们来看几句 aardio Java 混合编程的代码,看看到底有多方便:

import console; 
import java; 

//创建 Java 虚拟机
var jvm = java();

//导入 Java 类
HelloworldApp = jvm.import( "aardio.sample.HelloworldApp");

//修改类的静态成员变量
HelloworldApp.static_num = 996;

//获取类的静态成员变量
console.log( HelloworldApp.static_num );

//直接用 Java 类创建 Java 对象,跟 Java 中一样用就行
var helloworld = HelloworldApp();
  
//获取对象的成员字段值
console.log( helloworld.name );

//调用对象的方法
console.log( helloworld.test(1) );

//调用 main 函数,参数是字符串数组
var ret = HelloworldApp.main( {"aaa字符串数组1","bbb字符串数组2"} );
console.log(ret); 

console.pause();


是否简单得难以置信?我们可以在 aardio 中直接导入 Java 的类,创建 Java 对象,就像在 Java 代码中一样使用他们。

你也完全可以在 Java 中调用 aardio 函数,示例:

import java;  
var jvm = java(); 
HelloworldApp = jvm.import( "aardio.sample.HelloworldApp");

HelloworldApp.registerNative(
  function(env,jobject,jstring){
    var code = jvm.parseString(jstring) //也可以用 owner.parseString(jstring)
    var func = loadcode(code) 
    return jvm.string( func() )
  },"aardio","string(string)"
)
   
var helloworld = HelloworldApp();


非常简单。

你甚至可以将任何 Java 程序导入 aardio 生成软件,以 Java 编写的软件 FFDec 为例,原来只能自己去下载安装 JRE,现在不用这么做了,我用 aardio 写了个例子:

import java.ffdec; 
var prcs = java.ffdec(fsys.dlg.open("*.swf|*.swf"))


几句代码可以将 jar 导入 aardio 生成软件。这里为了方便我封装了一个扩展库 java.ffdec,实际上这个库的关键代码也只有几句:

class java.ffdec { 
  ctor( ... ){
    var args = {
      "-Xmx1024m",
      "-Djna.nosys=true",
      "-Dsun.java2d.uiScale=1.0", 
      "-jar",jarPath 
    }
    
    ..table.append( args, ..string.cmdline.arguments(...))
   
    return ..java.popenProcess( args,{workDir=..io.fullpath( self.workDir : "/")} );  
  }
}


当然,我们还可以直接调用 jar 的 main 函数来运行 Java 程序,以 YUICompressor 为例:

var jvm = java(); 
YUICompressor = jvm.import( "com.yahoo.platform.yui.compressor.YUICompressor");  
var ret = YUICompressor.main({"d:\test.js",  "-o","d:\testmin.js"})


更多的用法大家可以参考 aardio 自带的调用 Java 范例自行发挥:


图片

转载请注明原文地址: http://aardio.net/read-272.html
最新回复(0)
aardio问答
aardio编程语言