从2015年10月份开始接触Processing,到现在的2021年9月底,足足有6年了!笔者会竭尽全力把所有学到的知识、经验分享出来。这篇是关于Processing开发应用及发布分享的一些内容,可能会分好几期,慢慢整理。


关于发布、生成可执行应用文件(.exe)

因为日常都在Windows平台上工作,因此只针对exe可执行文件的发布分享来讨论。

Processing官方的IDE有输出成可执行文件的功能,点击菜单【文件-输出程序】即可。弹出的对话框如下图:



首先是基于系统平台,没什么好说的,默认Windows。

其次是展示模式,可以设成【Presentation Mode】,也就是展演模式,跟菜单【速写本-展示模式】一个效果,无论有没有定义fullScreen,都会全屏展示画布,展示分辨率低于桌面显示分辨率的话,超出部分被填充默认底色。当然还有个停止按钮的显示与否的控制。

再次是【Embed Java】,即是否要将JRE(java程序运行环境)一同复制一份并入应用目录中。Processing程序就是Java程序,因此JRE是必须要依赖的。如果被打开应用的系统上并没有相关JRE运行环境的环境设置以及包本身,那么是打不开应用的!而如果嵌入一起放入应用目录中,则不必担心是否有上述问题,无论该系统有无JRE环境都能正常运行。缺点是整个应用占磁盘空间增大了很多!本身Processing程序编译出来的字节码.class很小。还有个细节,我这里的截图是针对x64的,是64位版Processing导出,如果需要x86也就是32位版需要下载对应版本的Processing导出。

接下来看一下导出之后的目录文件及文件夹的样子。



可以看到默认命名application.windows32application.windows64两个文件夹被创建。其中的32位版是不包含JRE的,而64位版下面的java命名的文件夹就是JRE环境,默认大小186MB。其他的还有data文件夹,包含pde文件中所调资源的文件,如图片、视频、文本等;lib文件夹包含了java包文件.jar,如下图:



其中的Particles_guanfang.jar就是我们使用pde写的代码生成的字节码(逻辑),其他的都是Processing运行环境所需的功能包,特别是渲染部分opengl组件还有Processing自己的核心逻辑coresource文件夹中包含了源代码,包括.pde和自动填写的.java代码:



还有一个最重要的文件.exe可执行文件。至此官方给出的输出应用方案导出最后的结果就是上面看到的这些文件和文件夹。实质上官方也是借一个叫Launch4J的框架来生成相应的可执行应用程序。该框架免费使用,我们也可以单独使用它,选择需要输出的java源文件然后跟着向导推进,很方便就可导出exe可执行文件。而pde文件是独立于java语言系统的,要让其工作正常,就得需要.java源代码,这就为什么在source文件夹会多出一个自己补充填写好的.java文件。此文件代码内容容纳所有pde代码内容,使用标准的入口函数执行程序。

要发布,可以把application.windows64这个文件夹打包然后分享,用户只需要解包后进目录双击打开exe文件就能顺利运行程序。

应用程序的优化

说了那么多,并没有提到优化问题

【1】如果需要再封装,方便用户安装、卸载、管理,可以参考笔者的一篇关于安装包制作的分享文章:

【软件推荐】针对Windows平台的安装包制作工具汇总·自动化部署·打包软件

【2】看一看小小的官方例子打包出来的容量大小:



挺大的,是不是,相对其他商业软件而言,啊这~~~

试一试怎么瘦身。看一看哪里是大头!很显然,就是JRE环境包,整整186MB!能不能让他变得小巧一些但不失能力。答案是可以的,网上有不少相关资料,还有现成的“精简版JRE"供下载,试了一试,并不可行,Processing有他自己的封装,跟标准环境还有点出入,这个回头再探讨。总之可以参考我的做法:

找到java下面的bin文件夹,删除jfxwebkit.dll这个文件!

找到java下面的lib文件夹,删除ext文件夹!

这两个容量占比很大,删除后整个JRE变成100多MB,小了不少!还想减去也可以就得拆包,或者一个个小文件尝试删除而不影响运行,比较麻烦了。当然啦,如果打包了其实包大小还可以,比如采用精简版JRE后的压缩包大小为42.9MB,还算可以吧!

【3】如果输出多个PDE应用,则可以合并打包。如图:



怎么做到的?另外的多个PDE工程同样【文件-输出程序】,不用勾选JRE环境包了,导出之后,将文件夹中的所有文件及文件夹一起拷贝或剪切到第一个应用文件夹中,会有一些重复的文件,替换即可!这样就会自动合并。实际上是把对应程序的jar包放入指定文件夹中,还有data资源文件夹中的内容,还有最重要的exe文件统统合在一起了。当然source源代码如果不想分享出去也可删除、忽略。这样的做法,统一管理,也能很有效地降低了冗余数据,控制大小。回头可以借安装包的发布,生成一些快捷方式方便用户使用、运行和卸载。

小结

还有很多值得聊,比如可以增设批处理执行程序.bat.vbsps1等来统一管理应用;嵌入其他开发平台、应用软件中;手动打包导出应用等。慢慢来吧。希望能帮到读者,感谢。

关于Processing开发应用及发布分享的一些经验分享的更多相关文章

  1. 我的第一个自动刷作业脚本(大起大落的selenium经验分享)

    起因 故事的开始是大二的上学期,有一门叫计算机结构(computer organization)的课.新教授这门课的教授在原来的政策上做了一些变动.他引入了一个叫做zybook的作业平台来确保我们能跟 ...

  2. 【原创经验分享】JQuery(Ajax)调用WCF服务

    最近在学习这个WCF,由于刚开始学 不久,发现网上的一些WCF教程都比较简单,感觉功能跟WebService没什么特别大的区别,但是看网上的介绍,就说WCF比WebService牛逼多少多少,反正我刚 ...

  3. 线上Linux服务器运维安全策略经验分享

    线上Linux服务器运维安全策略经验分享 https://mp.weixin.qq.com/s?__biz=MjM5NTU2MTQwNA==&mid=402022683&idx=1&a ...

  4. 经验分享:如何用grep对PHP进行代码审计

    这是一个常见的误解- 企业需要购买复杂和昂贵的软件来发现应用程序中安全漏洞:而这些专门的软件应用程序,无论是黑盒或白盒,开源或商业,都能很快的发现安全漏洞. 事实是:所有这些专业的漏洞扫描工具都有其特 ...

  5. 【老司机经验】CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享

    CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享 1.缘起    这些年来一直在其他公司的实验箱和别人的开发板上进行教学与开发工作,总是觉得功能设计不那么合意.心里突然冒出个 ...

  6. 沉淀,再出发——在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享

    在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享 一.工作准备 首先,明确工作的重心,在Ubuntu Kylin15.04中配置Hadoop集群,这里我是用的双系统中的 ...

  7. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  8. Splunk大数据分析经验分享

    转自:http://www.freebuf.com/articles/database/123006.html Splunk大数据分析经验分享:从入门到夺门而逃 Porsche 2016-12-19 ...

  9. Kaggle 数据挖掘比赛经验分享(转)

     原作者:陈成龙 简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比 ...

  10. 应用交付工程师Troubleshooting经验分享

    应用交付工程师Troubleshooting经验分享 来源:http://blog.51cto.com/virtualadc/1188328 来源:http://blog.51cto.com/virt ...

随机推荐

  1. [AGC029D] Grid game题解

    这题很显然可以用贪心来解. 由于先手不动一定会让局数更少,所以先手要能动就动. 而后手一定是希望他的石子可以撞到一个障碍物上,这样先手就无法移动了,后手就可以让局数更少. 因为先手一定会能动就动,所以 ...

  2. ASP.NET Core: ConfigurationBuilder

    在 ASP.NET Core 中,大量使用了建造模式 Builer,从类型的名称就可以看出来这一点,例如 HostBuilder.ConfigurationBuilder 等等. 建造模式是对象的创建 ...

  3. 走向更强的 Literal 的时代

    正如 声明式编程的没落 - Inshua - 博客园 分析,声明式编程由于不符合软件工程需要,实际上正在淘汰,但与此同时,它的特征被过程式编程吸收为了Literal,中文翻译字面量. 什么是 Lite ...

  4. Argocd基于网络的终端

    https://argo-cd.readthedocs.io/en/stable/operator-manual/web_based_terminal/ 官网参考:​ ​https://argo-cd ...

  5. Linux新用户登录时出现“-bash-4.2$”的解决办法

    Linux服务器新建的用户在登录时显示"-bash-4.2$",而不是"user@hostname"的显示方式,出现此问题的原因是在添加普通用户时,用户家目录下 ...

  6. Failed to start bean 'webServerStartStop'; nested exception is org.springframework.beans.FatalBeanException: ServletWebServerFactory implementation

    使用jeecgboot报错 jeecg单测跑不起来,报错如下 Failed to start bean 'webServerStartStop'; nested exception is org.sp ...

  7. Qt音视频开发19-vlc内核各种事件通知

    一.前言 对于使用第三方的sdk库做开发,除了基本的操作函数接口外,还希望通过事件机制拿到消息通知,比如当前播放进度.音量值变化.静音变化.文件长度.播放结束等,有了这些才是完整的播放功能,在vlc中 ...

  8. Qt编写物联网管理平台41-自动清理早期数据

    一.前言 随着时间的增加,存储的历史记录也在不断增加,如果设备数量很多,存储间隔很短,不用多久,数据库中的记录就非常多,至少是百万级别起步,而且有些用户还是需要存储每一次的采集的数据,这数据量别说一年 ...

  9. minimind复现记录

  10. Vue数据更新不渲染页面的问题

    一. 问题现象 在通过数组下标的方式修改集合元素,元素的值确实是更新了,但是页面不能重新渲染. 二. 原因分析 Vue官方文档传送门 三. 解决方案 // 针对数组使用 this.$set(arr,i ...