Feeling

    三人行,必有我师焉

   ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  185 随笔 :: 0 文章 :: 392 评论 :: 0 Trackbacks

#

Java应用定制工厂(以下简称为JCB,Java Customization Builder)是一个针对Java轻量级桌面应用进行精简优化的小工具,使用它可以精简你的jar包,并自动生成一个精简的JRE,也可以使用它生成一个Exe启动引导程序,并且能够对你的Java应用自动做Pack200和Unpack200处理。使用本工具定制的Java桌面应用通常不会超过5M(包含JRE),SWT客户端程序相对于Swing客户端程序更小,一般不会超过3M。

JCB1.0.3主要功能是可以支持
添加Exe的版本信息,并且能够更细节的定义Exe的启动行为,比如是否显示一个splash窗口,是否优先使用精简版的jre,以及增加了对unpack操作的优化,让应用程序第一次运行启动的更快。同时也增加了对系统权限的支持,不再要求需要管理员权限才能运行软件,Guest用户一样的使用。

下一个版本考虑增加一个Au3的编辑器,具有语法高亮和智能辅助功能,可以让高级用户定制自己的Exe行为。

软件主页:http://jcb.sourceforge.net
JCB1.0.3下载地址:http://sourceforge.net/projects/jcb/files/JCB_1.0.3.zip/download


posted @ 2011-12-26 22:13 三人行,必有我师焉 阅读(1599) | 评论 (3)编辑 收藏

在一个线程中启动了一个线程钩子,然后死活拿不到主线程中的消息,全局钩子就没问题。折腾了一下午才发现这个线程钩子是在子线程中启动的,GetCurrentThreadId 方法拿到的不是主线程的threadId,自然也就获取不到主线程的系统消息。Google了好多文章,都没有提到这一点,真TMD郁闷,完全浪费我时间,还以为是我的类库写错了,闹了半天是调用的参数传的不对。
posted @ 2011-12-24 18:58 三人行,必有我师焉 阅读(1778) | 评论 (1)编辑 收藏

同样的API, IShellFolder遍历控制面板里面节点的children,所有的.net代码都能获取,所有的非.net代码都无法获取???

本来还以为是代码的问题,debug一天死活没找到问题,最后在codeproject上找了十几个例子,发现都一样的结果,why? 

难道仅仅对.net的才开放遍历的权限?
posted @ 2011-12-14 12:35 三人行,必有我师焉 阅读(1727) | 评论 (1)编辑 收藏

1、安装VS2008
2、安装 Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
3、修改SDK的SetEnv.cmd的第146行 
Set "VCTools=%VCRoot%\VC" 为 Set "VCTools=%VCRoot%\VC\Bin"
4、修改build.bat的环境配置
call "C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\SetEnv" /xp /x86 /Release (不是%PROGRAMFILES%目录,编译字幕为绿色,PROGRAMFILES%目录编译出来的dll有400多k。)
call "%PROGRAMFILES%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
posted @ 2011-12-13 13:16 三人行,必有我师焉 阅读(370) | 评论 (0)编辑 收藏

     摘要: Java应用定制工厂(以下简称为JCB,Java Customization Builder)是一个针对Java轻量级桌面应用进行精简优化的小工具,使用它可以精简你的jar包,并自动生成一个精简的JRE,也可以使用它生成一个Exe启动引导程序,并且能够对你的Java应用自动做Pack200和Unpack200处理。使用本工具定制的Java桌面应用通常不会超过10M(包含JRE),SWT客户端程序相对于Swing客户端程序更小,一般不会超过5M。  阅读全文
posted @ 2011-12-12 16:27 三人行,必有我师焉 阅读(6218) | 评论 (12)编辑 收藏

GreenJVMMake 是一个精简JRE的小工具,详细信息请参见项目:

http://code.google.com/p/greenvm/

javaonepackage 是一个集成了GreenJVMMake的IDE,可以方便的生成自定义的JRE,详细信息请参见项目:

http://code.google.com/p/javaonepackage/

比较遗憾的是javaonepackage的作者遗失了代码,导致项目无法进一步的更新,影响了使用。

用以上工具生成的精简JRE通常不超过2M,可是用exe4j将Java应用转换成exe的时候,却会抛出Couldn't load main class,原因是因为exe4j使用自己的jar来加载用户的Jar包,这其中用到了一些反射机制,精简JRE里面当然是不含有多余的class文件的,所以加载必然失败。我们需要做的就是把这些相关的class添加到精简JRE中,这些class包含在 java\lang, java\util, sun\reflect 这三个包中。将这些class添加到精简jre中,大小也仅仅增加数百K而已,在我们可以的接受范围之内。

PS:由于GreenJVMMake的机制是检查运行时加载的class文件,所以它很可能遗失Jar运行所需要的exception class,这会导致运行时JVM的崩溃,用户需手动加载所有可能会产生的exception class,包含runtime的和非runtime的。
posted @ 2010-09-02 10:53 三人行,必有我师焉 阅读(4011) | 评论 (1)编辑 收藏

现在网络上越来越流行.net和java写的客户端的小应用程序,而且后缀是exe。本文讨论的是如何从exe4j封装的exe文件中将自己想要的jar抽取出来。

exe4j一直是一种比较通用的java exe封装工具,但是其并没有将jar转换为本地文件,而是将jar文件通过特殊处理后,封装成的一个exe文件。因此只要我们了解了exe4j的原理,就可以将jar文件从exe文件中提取出来,并通过反编译工具来查看程序代码。

1. 分析Exe4J,得知其在添加文件到.exe时,使用0x88将文件内容Xor,所以第一步,我们需要将原始的数据提取出来:
import java.io.*;
import java.util.*;

public class gen {
    
public static void main(String args[]) throws IOException {
        FileInputStream fin 
= new FileInputStream(args[0]); // 可以将整个exe文件解码
        FileOutputStream fout = new FileOutputStream(args[1]);
        BufferedInputStream bin 
= new BufferedInputStream(fin);
        BufferedOutputStream bout 
= new BufferedOutputStream(fout);
        
int in = 0;
        
do {
            in 
= bin.read();
            
if (in == -1)
                
break;
            in 
^= 0x88;
            bout.write(in);
        } 
while (true);
        bin.close();
        fin.close();
        bout.close();
        fout.close();
    }
}

2.分析提取出来的数据文件,使用WinHex查看其16进制代码。由于Jar文件的开头总是PK开头,并且总包含有manifest.mf文件,并且结尾总是有3个00,同时结尾段有整个Jar包文件的索引,我们可以根据这一特性来分析我们需要的片段。

1、搜索Jar的manifest,然后往前找,找到的第一个PK段,即为一个Jar的开头。
2、查看片段里Jar里的每个class信息,直到最后的文件索引片段。
3、一个Jar的结束片段位于索引片段之后,仍然包含着PK段,并且最后包含着3个00,且这3个00距离PK大概20个字节左右

根据以上3条准则,足以提取整个Jar数据段,然后导入新文件中,并且以zip字段命名,尝试用ZIP解压缩软件打开,看看是否抽取正确。

需要注意的是WinHex非注册版,只能保存280K大小的文件,更大的Jar文件,需要注册版的WinHex才行。
posted @ 2010-08-22 01:03 三人行,必有我师焉 阅读(6768) | 评论 (4)编辑 收藏

1、调用截图工具:

http://iecapt.sourceforge.net/

2、使用Java类库,通过Render生成Java2D图像:

http://www.ldotc.com/Web+Page+Thumbnails+in+Java.html

方法1的优点在于,图像不会失真,速度快,但是缺点是依赖于服务器端的UI,无UI的话,则无法使用。
方法2的优点是不依赖于服务器端的UI,但是图像容易失真,且速度相对较慢……
posted @ 2010-08-17 12:50 三人行,必有我师焉 阅读(1439) | 评论 (0)编辑 收藏

     摘要: TGA or TARGA format is a format for describing bitmap images, it is capable of representing bitmaps ranging from black and white, indexed colour, and RGB colour, the format also supports various compr...  阅读全文
posted @ 2010-03-29 13:02 三人行,必有我师焉 阅读(1989) | 评论 (0)编辑 收藏

Eclipse 是一个集成开发环境,同时又是一个产品平台。这样有时候我们就会碰到一个问题,在开发Debug项目的时候没有问题,打包发布的时候就有问题了,这可如何是好?由于Debug时候和发布后plugin的ClassLoader机制不尽相同,出现这个问题的几率还有会有的。

Java 在这一点上为我们提供了方法,那就是远程Debug。远程Debug一般用于Web开发,或者客户端无法负载大规模的应用时才会运用到,所以Desktop developer 很少会涉及到这个概念。不过Eclipse 的产品平台却让我再次体会到了Java的强大。

关于Eclipse Remote Debug的文章,大家可以从此处学习:

http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/index.html

Remote Debug 需要2方面的设置,一个是产品平台JVM启动参数的设置,需要让平台以远程Debug的模式启动。然后是在开发端监听产品平台的运行状态。当产品平台运行到断点代码时,Eclipse开发端就会进入Debug界面,像普通debug一样正常debug了。

posted @ 2009-09-10 16:59 三人行,必有我师焉 阅读(2403) | 评论 (1)编辑 收藏

仅列出标题
共9页: 上一页 1 2 3 4 5 6 7 8 9 下一页 
GitHub |  开源中国社区 |  maven仓库 |  文件格式转换