Java 快速开发几 MB 独立 EXE,写图形界面很方便(java怎么开发exe程序)

aardio 可以支持很多编程语言, Java 就是其中之一。

aardio Java 可生成体积极小的独立 EXE 文件,可以内存加载 Java 编写的 Class 文件,用 aardio Java 生成的软件,发布时不需要携带 Java 运行时

aardio 写图形界面很方便,参考仅 755 KB 的开源软件 Gif123:

Java 快速开发几 MB 独立 EXE,写图形界面很方便(java怎么开发exe程序)

aardio 开发的程序,兼容XP,Vista,Win7,Win8Win10Win11…… 等所有系统。aardio 只支持 Windows 系统( macOS Linux 桌面市场份额小于被遗忘的 Win8 ),同时也扔掉了跨平台的沉重包袱(更轻量、更好地利用专用平台优势)。将需要跨平台的代码用 java 写,这并不影响在 Windows 上可以使用 aardio 生成 EXE 文件 。跨平台与专有平台工具并不冲突,可以相互结合。

开始

默认只要在 aardio 中调用

import java;

就会自动搜索系统可用的 JRE,如果没有找到 JRE,会自动导入 java.jre.v8 扩展库,并自动安装 OpenJDK JRE v8 。

如果您希望发布的软件自带 Java 运行时,或者指定 JRE 的版本,只要在 aardio 中导入其他版本 JRE 的扩展库就可以,例如运行

import java.jre.v8ora

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

当然,独立 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 自带的 aardio Java 范例( 可以直接运行 )。

Java 快速开发几 MB 独立 EXE,写图形界面很方便(java怎么开发exe程序)

aardio 调用 Java 函数

首先请看下面 aardio 调用 Java 如此简单,我们可以在 aardio 中直接导入 Java 的类,创建 Java 对象,就像在 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();

Java 会在 CLASSPATH 指定的搜索目录下使用 Java 类名(替换'.'为'')" 去查找类,这类似 Windows 到 %PATH% 环境变量下搜索文件。CLASSPATH 已默认添加 "/java/"以及"/java/*.jar" 在首次创建 Java 虚拟机以前,可用下面的函数添加目录到 CLASSPATH:

java.addClassPath("/java/");

以上参数指定目录下的 *.jar 也会自动添加(不递归子目录)。

也可以如下自内存或文件直接加载类,注意下面的路径前面的$操作符可将文件编译到代码中(发布后不再需要原文件)

HelloworldApp = jvm.import("aardio.sample.HelloworldApp" ,$"javaaardiosampleHelloworldApp.class");

以上文件路径前面的波浪线反斜杠(或斜杆)表示程序根目录(开发时一般指工程目录,发布后指启动EXE文件所在的目录)。

Java 调用 aardio 函数

示例:

import console;import java; //创建 Java 虚拟机var jvm = java(); //导入 Java 类HelloworldApp = jvm.import( "aardio.sample.HelloworldApp");//为 Java 提供 Native APIHelloworldApp.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();console.log( "Java 函数返回值",helloworld.test_aardio() );console.pause()

Java 类 HelloworldApp (在范例中可以找到)中如下声明 aardio 函数:

static native String aardio(String code);

aardio 直接运行 jar 程序

您仅需数句代码可以将 jar 导入 aardio 生成软件件。以 Java 编写的软件 FFDec 为例,原来只能自己去下载安装 JRE,现在不用这么做了,我用 aardio 写了个例子:

Java 快速开发几 MB 独立 EXE,写图形界面很方便(java怎么开发exe程序)

这个扩展库 java.ffdec 的源代码只有几句:

Java 快速开发几 MB 独立 EXE,写图形界面很方便(java怎么开发exe程序)

aardio 调用 jar 的 main 函数

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

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

Java 函数签名

原本调用 Java 函数要写签名,但这个签名写起来是有些累的。所以 aardio 已经把这个事情完全给优化掉了,aardio 调用 Java 一般不用再去写签名。

但是 aardio 仍然允许以声明普通静态 API 函数的语法指定 Java 函数签名 —— 然后由 aardio 自动翻译为 Java 函数签名。

举个例子:

import java;var jvm = java();//导入 Java 类HelloworldApp = jvm.import( "aardio.sample.HelloworldApp"); //getMethod 用于获取一个函数,参数 @2 指定函数签名var main = HelloworldApp.getMethod("main","string(string[])");//通过声明导入的函数,如果参数是字符串,可以把参数展开写var result = main("test1","test2")

但是上面的函数签名一般可以省略,可以简化为下面的代码:

HelloworldApp.main( { "aaa字符串数组1","bbb字符串数组2"} )

上面的示例需要的 Java 类,可以在​ aardio 自带范例里找到:

Java 快速开发几 MB 独立 EXE,写图形界面很方便(java怎么开发exe程序)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年5月14日 上午9:55
下一篇 2023年5月14日 上午10:11

相关推荐

  • 科研信息化管理

    科研信息化管理 随着科技的不断发展,科研信息化管理已经成为现代科学研究中不可或缺的一部分。科研信息化管理不仅可以提高科学研究的效率和质量,还可以为科学研究提供更加全面和准确的信息支…

    科研百科 2024年7月11日
    28
  • 2021年中国经济观察:关键核心技术攻关实现新突破(展望2035年我国关键核心技术实现重大突破,进入)

    原标题:科技创新为构建新发展格局、推动高质量发展提供有力支撑 ——科技自立自强谱新篇(2021年中国经济观察②)   “十四五”开局之年,我国科技创新捷报频传——   飞越深空,天…

    科研百科 2022年9月15日
    171
  • 学校党组织领导的校长负责制领导小组

    学校党组织领导的校长负责制领导小组 摘要 学校党组织领导的校长负责制领导小组是在学校党组织领导下,对学校行政工作进行领导、协调、监督和指导的机构。该领导小组的主要职责包括:制定和实…

    科研百科 2024年12月6日
    0
  • 项目管理系统全球

    项目管理系统全球 随着现代商业的发展,项目管理系统已经成为了企业成功的关键因素之一。项目管理系统可以帮助企业更高效地管理项目,提高团队协作和沟通能力,降低项目风险,减少成本,并提高…

    科研百科 2024年12月14日
    0
  • 南通通州区科研项目有哪些南通通州区科研项目有哪些

    南通通州区科研项目有哪些 南通通州区位于江苏省南通市,是一个历史悠久、文化底蕴深厚的城市。随着城市的不断发展,通州区也在积极申报科研项目,为城市的发展注入新的活力。 目前,通州区正…

    科研百科 2024年9月11日
    21
  • 科研项目 立项书

    科研项目立项书 项目名称: 探究汉字演变与传统文化联系的科研项目 研究背景: 汉字是中国文化中最重要的符号之一,其演变历史蕴含着丰富的文化内涵。然而,对于汉字演变的历史,我们仍然有…

    科研百科 2025年2月26日
    0
  • 为什么STM32学了很久还是不会做项目?

    可能你已经学习了很久,但是当Leader抛给你一个STM32项目,你是不是依然手足无措? 有一朋友刚开始学习的51单片机,后来转STM32了。主要是跟着网上的在线课程学习,自己下边…

    科研百科 2023年3月18日
    211
  • 上海工会经费使用规定(上海工会经费管理办法)

    上海工会经费管理办法上海工会经费管理办法(2020年)国内的金融机构在2021年发布了2019年北京社会福利基金会的报告,《“我想报读葡萄牙·奥兹大学》、《经济学》和《证券投资学院…

    科研百科 2024年5月17日
    122
  • 建筑协同办公

    建筑协同办公:高效协作的关键 建筑行业是一个高度协同的行业,每个建筑项目都需要多个部门之间的密切合作。建筑协同办公是指在项目中协调各个部门的工作,确保项目按时完成的关键步骤。本文将…

    科研百科 2024年9月23日
    17
  • 江苏国家重点实验室

    江苏国家重点实验室: 探索科技创新之路 江苏国家重点实验室是中国政府为建设高水平科技创新平台而设立的实验室之一,位于江苏省南京市。该实验室的成立旨在推动科技进步,促进经济发展,为建…

    科研百科 2024年10月2日
    14