如何替换JDK本身的部分API?如非公开类以及JRE本身的部分DLL 如题。我知道可以替换JDK/JRE中的部分类或DLL,但是存在部署的问题。总不能每次部署都带着个自己的JRE吧。而且这也存在授权问题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你都要自己定制了,当然要带着环境到处跑啊可以想想有没有别的解决方案而不用修改公用api的,否则只能带着跑 jdk 有个ext 下面可以放一些包可以替换的另外 重定义classloader 貌似也可以实现 这和我说的是一样有部署的问题,至于重定义classloader如何做,才能达到这个目的呢?还有什么其他方法吗? 我想你可以这样做你既然要替换类,那么你就要先找的你自己定义的类,后找到jre的包,哪这个只能有classloader 来做,简单的不需要. 比如你拷贝下String 的源码自己定义一个类java.lang.String,会先找这个类的.dll 这个不好说,不过貌似也是可以的. 能不能自定义启动环境,即另写一个 bat 文件来启动你的应用程序,然后再这个文件中设置 classpath, 指你自己的相关的库文件 其实你既然已经替换掉jdk或者jre中的dll,那就不存在通用性了,每次部署你都必须带着自己的jre,这是肯定的。就算不带自己的jre,那你也要带着那些替换的内容,其实还没有直接带着自己的jre方便了。还有,不要随随便便更换掉java核心包中的内容,否则这样的代码特性就只能运用于你自己的jre中了,而且启动类加载器不能加载java.包下面自定义的任何类,不过你可以自己实现自定义的ClassLoader。 谢谢大家的建议。但是有时确实需要概念JDK本身的实现,比如有些是JDK本身的BUG,因此也就别无选择了。但是修改或替换JRE的组件对部署有很大影响,因此不是一个很好的解决方案。请大家集思广益,看看有什么更好的方法。主要目标是:1、修改JDK本身的部分API的实现(不多,很多是在基础上修改或改进),有些是核心包,有些是非公开的。2、修改JDK的一些DLL的实现。 1、根本没有必要修改jdk本身的实现,如果你觉得jdk自带api实现不好,完全可以自己实现,例如对zip的处理,java api就实现得不好,对中文处理只能用utf-8格式。但是不等于替换掉java的api。2、dll实现。你也可以自己用jni实现,例如磁盘读写等等,但是实现似乎也没有必要非要替换掉jdk下的那些dll,完全可以放在自己的程序目录下。如果你觉得sun的jdk本身有很多你无法接受,或者影响到你系统实现,且无法用自己的代码来解决的bug,例如java在内存处理上的问题,或者虚拟机在某些环境下无法正常运行,你可以将环境描述以及bug描述发到sun官方,如果你迫切急需改掉虚拟机固有bug,在短时间内是无法完成的,因为需要自己开发java虚拟机。但是这些是属于java虚拟机的bug和不适应性,如果仅仅是api调用的功能缺陷,你完全可以自己去实现的,但是绝对不要替换掉jdk下的东西。 字符串提取 正则表达式 请推荐一本Java图像处理的的书 现在Java开发主要用哪款IDE? 什麼演算快速搜索( 2D or 3D array)? 初学者,用java写一个crowler,首先要做些什么呢? jar双击没有反应? 这该怎么解释啊? 用哪个类型替代ResultSet来返回 郁闷! 求解!Java如何能在多个applet之间实现类似asp的session类! 关于eclipse中无法运行bat的问题 帮我看下为什编译不了
可以想想有没有别的解决方案而不用修改公用api的,否则只能带着跑
可以替换的
另外 重定义classloader 貌似也可以实现
你既然要替换类,那么你就要先找的你自己定义的类,后找到jre的包,哪这个只能有classloader 来做,简单的不需要. 比如你拷贝下String 的源码自己定义一个类java.lang.String,会先找这个类的.
dll 这个不好说,不过貌似也是可以的.
能不能自定义启动环境,即另写一个 bat 文件来启动你的应用程序,然后再这个文件中设置 classpath, 指你自己的相关的库文件
就算不带自己的jre,那你也要带着那些替换的内容,其实还没有直接带着自己的jre方便了。
还有,不要随随便便更换掉java核心包中的内容,否则这样的代码特性就只能运用于你自己的jre中了,而且启动类加载器不能加载java.包下面自定义的任何类,不过你可以自己实现自定义的ClassLoader。
但是有时确实需要概念JDK本身的实现,比如有些是JDK本身的BUG,因此也就别无选择了。但是修改或替换JRE的组件对部署有很大影响,因此不是一个很好的解决方案。
请大家集思广益,看看有什么更好的方法。
主要目标是:
1、修改JDK本身的部分API的实现(不多,很多是在基础上修改或改进),有些是核心包,有些是非公开的。
2、修改JDK的一些DLL的实现。
2、dll实现。你也可以自己用jni实现,例如磁盘读写等等,但是实现似乎也没有必要非要替换掉jdk下的那些dll,完全可以放在自己的程序目录下。
如果你觉得sun的jdk本身有很多你无法接受,或者影响到你系统实现,且无法用自己的代码来解决的bug,例如java在内存处理上的问题,或者虚拟机在某些环境下无法正常运行,你可以将环境描述以及bug描述发到sun官方,如果你迫切急需改掉虚拟机固有bug,在短时间内是无法完成的,因为需要自己开发java虚拟机。但是这些是属于java虚拟机的bug和不适应性,如果仅仅是api调用的功能缺陷,你完全可以自己去实现的,但是绝对不要替换掉jdk下的东西。