
java
bmqnctrue
我在研究计算机游戏,游戏引擎和图形学
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java.lang.UnsupportedClassVersionError
NLP研究用了grammarscope,结果貌似grammarscope用了貌似1.6编译的,而我机器上市1.5,因此报错。这种错误下只能只能重新装了1.6了,除非我用的jdk1.5重新编译它的源代码。其实java.lang.UnsupportedClassVersionError本质上说是compile level与jre不一致导致。比如说是用1.6编译,compile leve...2010-03-16 10:33:05 · 138 阅读 · 0 评论 -
LinkedHashMap源代码解析
LinkedHashMap源代码比较简单,由于LinkedHashMap继承自HashMap,Hash和存放那部分操作和HashMap是相同的。只要看懂了HashMap那部分代码,这个都不难看懂。唯一与HashMap的区别就是在里面还维护了由header构成头指针形成的一个双向链表。每次addEntry和remove的时候要维护这个链表。唯一困惑的地方是containsValue那...原创 2010-12-27 15:57:36 · 111 阅读 · 0 评论 -
TreeMap代码也读了
今天看TreeMap的代码,发现里面用的虽然是搜索二叉树,但又用到了平衡二叉树,是RB Tree!Cool!原创 2010-12-29 15:16:01 · 117 阅读 · 0 评论 -
Override在1.5不能用于接口中的方法
今天改了eclipse中的compiler level,发现原来在接口中的Override 注释都报错,原来是1.5与1.6在这个地方有区别,1.5不支持在interface的方法上加Override ,1.6修正了它改为了可以在实现interface的方法上加这个注解...原创 2010-12-30 10:23:23 · 111 阅读 · 0 评论 -
Apache common collection CollectionUtils 中的一个BUG
CollectionUtils中的removeAll方法存在bug,它应该调用的是ListUtils的removeAll方法,可能是开发人员迷糊了一下,应该是个bug,我今天已经给apache写了一封信了。。看了collection中的其他类,有些类还是相当厉害的,主要是思想比较好。比如Closure这个类,有点像cpp中的STL中的算子的概念,已前cpp中经常见到对for_eac...原创 2011-05-17 11:51:49 · 268 阅读 · 0 评论 -
Java中的ArrayList的remove(Object obj)方法浅析
今天改了一个bug,发现原来是原来程序员写的equals方法有点问题,实在问题很多。顺便看了一下ArrayList的remove(Object obj)方法,不妨来看一下,以下是remove方法:[code="java"]public boolean remove(Object o) { if (o == null) { for (int index ...原创 2010-09-27 17:19:53 · 738 阅读 · 0 评论 -
CheckboxTreeViewer中判断节点的相同性的原理浅析
首先说这个项目的结构比较混乱,软件架构我还看得不是很清楚,但代码结构实在很混乱,程序员的水平实在不敢恭维,代码中竟然能出现“index_1”一直到index好几十的那种命名方式,faint!后来还要一直遵守这种命名方式,实在很无聊。。。好了,我就说说我今天的收获。首先是CheckboxTreeViewer的setSubtreeChecked(Object element, bool...原创 2010-09-27 17:32:43 · 131 阅读 · 0 评论 -
今天自己做了redo-undo功能
现在的项目中有一个文本编辑器(类似记事本的),是之前的程序员写的,他是自己管理redo-undo栈,我看了一下,根本没法用那个redo-undo功能(只能redo-undo一次,晕死),而且其中的逻辑超级乱。我改写了一下,代码还算简洁,由于是公司的项目,我不能贴代码,只能讲讲我实现的思路。具体就是在编辑框输入的同时,将前面的输入压到undo栈,但要注意,当前在文本框的文本应该将其入...原创 2010-10-12 15:31:59 · 222 阅读 · 0 评论 -
关于将字符串转换为数值的parseXXX方法疑惑(parseInt中带“+”号)
今天看了一下,parseInt和parseDouble,parseFloat等方法,发现Double那种在字符串中开始位置处包含“+”号不会抛出异常,而对于Integer那种反而能抛出异常,这点很奇怪。。。。我看了parseInt的源代码,我觉得在前面加上控制“+”号的字符串解析应该是没问题的,这点很纳闷,不知道当初Sun的程序员设计考虑了什么因素,导致在Integer中不能用"+"号。...原创 2010-10-25 10:18:11 · 6384 阅读 · 0 评论 -
关于将多个数组并为一个的实用函数
这里,取字符串数组为例,对象比较麻烦,因为本身要判断各个数组的大小,java中对象又用引用表示,所以有点麻烦,做也能做,但就是比较麻烦。我今天写的代码,是我感觉比较得意的,看下:[code="java"]/** * 将多个String类型的数组合并成一个String类型数组. * 注意,用unionObjectArrays和toDestArray方法组合使用也能达到...原创 2010-11-03 11:47:30 · 290 阅读 · 0 评论 -
TreeMap中使用的陷阱之一
今天做TC,用到了TreeMap,用到了其中的一个方法pollFirstEntry(),但是发现这个方法是since 1.6的,而TC只支持到1.5的jdk,我试着改为先getFirstEntry().getKey(),然后对这个key做了一点操作,然后再remove(key),然后再put(key,value),结果发现pollFirstEntry能得到正确的结果,但用后一种却得不到正确的结果,...原创 2011-01-28 10:59:40 · 149 阅读 · 0 评论 -
java Windows平台下的中\t的陷阱
通常情况下,我们测试某一个代码的时候,会新建某个目录,经常我们会命名testXXX,然后我们会将测试的资源放入该文件夹,在程序中我们硬编码加载该文件夹中的资源,但是很奇怪的是我们有时加载不到该资源,路径检查了很多次,都是没问题的。tricky的地方就在于能够\t是转义字符,而且eclipse中只有在输入值发生编译错误时能够提示错误,而此时testXXX是字符串是不会出现编译错误的,因此此时...原创 2011-03-09 17:25:57 · 177 阅读 · 0 评论 -
RCP程序中提示无法访问直接访问某个类时的解决办法
当提示无法直接访问类时,可以在插件对应的manifest中直接加入类所在的bundle名称.,如果还不行,还要检查要import的bundle是否export了对应的package。目前我对osgi还不是很了解,但我估计这是osgi的某种机制。看来学好RCP,对osgi的了解是必要的。...原创 2011-03-09 17:35:10 · 160 阅读 · 0 评论 -
关于eclipse加载bundle的问题的一些讨论
这两天主要是为GMF的环境的事情弄的焦头烂额,问题很多,而自己一开始的时候没有注意到这些问题(尤其是插件之间的版本的依赖关系),导致弄了很长时间。首先说明我碰到的问题:1.application id not found.2.找不到对应的bundle问题.主要是围绕这两个问题查了很多资料,原来不了解osgi,后来查了osgi相关的概念,总算理解了一些,但是当时问题还是没有解...原创 2011-03-11 17:15:05 · 860 阅读 · 1 评论 -
eclipse3.7 对于rcp开发的增强的一个功能
1. eclipse到现在为止对于运行时的rcp配置有一点一直感觉不太好,就是不能直接根据product的配置来选择运行时刻的导出信息,新版本的3.7也是如此,不过eclipse上已经将其作为一个bug提交,参见这里:https://bugs.eclipse.org/bugs/show_bug.cgi?id=326059(这里说到了可以打上一个补丁,只有3.7能打上这个补丁)如果在团队开...原创 2011-07-26 10:41:17 · 224 阅读 · 0 评论 -
关于rcp插件加载的一个提示
今天建立了一个新插件,然后在原插件中引用了该新插件,但是启动product时却发现找不到该新插件,后来弄了半天,终于搞明白了,必须在启动的时候将其配置到输出插件中这样才可以找到该新插件。...原创 2011-03-25 17:26:32 · 189 阅读 · 0 评论 -
关于类库函数设计中的一点哲学
在类库中很多函数设计很巧妙,至今我还在体会他们的设计哲学是怎么样的,比如关于LinkedList的,里面有一个函数:[code="java"]public E getFirst() { if (size==0) throw new NoSuchElementException(); return header.next.element; }[/code...原创 2010-12-24 17:00:01 · 115 阅读 · 0 评论 -
LinkedList中addAll(int index, Collection<? extends E> c)函数分析
[code="java"] public boolean addAll(int index, Collection原创 2010-12-24 16:33:21 · 709 阅读 · 0 评论 -
对LinkedList源代码中entry函数的一点启示
看下entry的代码:[code="java"] /** * Returns the indexed entry. */ private Entry entry(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsExcep...原创 2010-12-24 16:24:07 · 119 阅读 · 0 评论 -
JLS
http://java.sun.com/docs/books/jls/很无敌的一个规范说明,基本上很多牛人讲的我看来都是其中讲的东西的中文翻译版。。。。原创 2010-01-20 13:48:20 · 1454 阅读 · 0 评论 -
java中的enum类型与单态设计模式
单态设计模式有三种做法:1.声明公有实例为public2.公有实例为private,对外提供public的方法返回实例。这包括懒加载与勤加载。3.利用1.5中引入的ENUM类型。这三种中,最好的是用enum类型,因为前两种不能抵御反射攻击(也能做到,但是是要在实例第二个对象的时候抛出异常),并且对象序列化上还要自己做一些额外的工作,而enum天生是抵御反射攻击,并且在序列化上是...2010-01-20 14:10:46 · 105 阅读 · 0 评论 -
大数的一个问题
API中的陷阱挺多的,看以下:[code="java"]System.out.println(2.0-1.1);[/code][code="java"]System.out.format("%.2f",2.0-1.1);[/code]第一个语句进行正常的浮点运算,当然2.0-1.1是不能精确表示的,因此结果不是0.9。但是第二个语句的format中是将参数作为对象来对待,输出结果是...2010-04-25 23:38:36 · 99 阅读 · 0 评论 -
java 中的comparable 和comparator
都用于比较对象,但二者区别在于:comparable是用于类本身实现的一个接口。而当类固定之后,类的客户端在无法修改类的情况下,或者类本身的comparable接口不能做到特定应用的比较的时候,我们可以自己定义comparator比较器。在Arrays的排序函数中如果指定了以comparator来排序函数,那么即便类本身定义了comparable接口,依然用的是comparator来比较。...2010-04-30 00:19:23 · 82 阅读 · 0 评论 -
数值计算的一个陷阱
[code="java"]int x;int y;long z=x*y;[/code]以上代码貌似已经做到处理了溢出,但实际上在x*y时已经发生了溢出,所以即便z是long类型最后结果也会出错。正确的做法应该是[code="java"]long z=x*1L*y;[/code]今天写一个算法这个溢出地方没注意,结果贡献了WA一次。...2010-04-30 22:35:25 · 130 阅读 · 0 评论 -
Eclipse的TreeViewer中ViewFilter中select方法的理解
select是根据Viewer的input数据来进行筛选的,并且会循环的获取每个元素的子节点。但是一个陷阱在于:如果筛选的时候父节点被筛选掉了(返回值为false),则子节点就不会再被筛选了。因此,有时候为了正确的进行筛选,必须对父节点进行递归调用,看是否子节点中有可以显示的项。如果子节点可被显示,则父节点也应被显示(返回true值),否则返回false。不过这里我有两点担心:1.当父...原创 2010-07-28 14:51:43 · 289 阅读 · 0 评论 -
eclipse 的redo undo功能中operation history的dispose函数分析
原来是做一个类似清空回收站的功能。即在回收站中清除某个节点后必须将该节点对应的redo undo操作删除,即从操作历史堆栈中将对应的记录删除。开始觉得operation history的dispose函数可能能实现这样的功能,看代码的注解说当operation的context与指定的context相符合时从操作堆栈删除记录,后半句关于引用的那句话一开始没看懂。于是自定义了Cus...原创 2010-08-03 17:30:48 · 400 阅读 · 0 评论 -
java中File.separator的pitfall
先上代码:[code="java"]import java.io.*;public class Test{ public static void main(String[] args){ String regex=File.separator+File.separator+File.separator+File.separator; String consta...原创 2010-08-19 14:04:04 · 229 阅读 · 0 评论 -
ResourceNavigator使用的一些注意点
ResourceNavigator使用的一些注意点:需要注意的是导航器视图的TreeViewer中的标签提供器用了装饰器,因此,这里要注意的是,在直接整合导航器视图到RCP程序中时,需要自己提供一个标签变更监听器,然后根据发生的变化及时的刷新树。该标签装饰器中比较恶心的一点时,标签装饰器在后台渲染一副图像,并且这种渲染是异步的,因此,会导致在getIma...原创 2011-04-15 17:03:32 · 156 阅读 · 0 评论 -
在RCP中整合版本插件的一点体会
需要注意的在自己的RCP项目中新建一个项目时需要注意不能将之前已经创建的工程信息随意删除(删除时会删除一些版本管理的特定信息,程序中,需要根据工程存在的不同情况做判断),否则在重新打开RCP后无法将之前已经纳入版本管理的工程自动的纳入版本管理。...原创 2011-04-15 17:16:53 · 158 阅读 · 0 评论 -
jdom版本变化带来的一个bug(XMLOutputter的setIndent方法)
jdom版本变化,其中有的版本的XMLOutputter中含有setIndent方法,有的已经没有了,具体的变化没在jdom的网站上查到,关键是jdom没有接口变化的一个list。 还有一个问题是我在调程序的时候发现一个非常难搞定的问题,就是当发生这个问题的时候抛出了NoSuchMethodError,注意是Error,不是exception,所以虽然在程序中发生了错误,程序中也有做处...原创 2010-09-02 15:31:56 · 449 阅读 · 0 评论 -
eclipse rcp中treeviewer刷新陷阱
treeviewer中在设置内容提供器或者标签提供器时会自动刷新该树,因此不用再去调用树的refresh方法来刷新,这点让我郁闷了很久。项目中节点数很多,多达好几千,如果动不动就刷新一次,整个界面非常卡(UI线程在刷界面),因此这一点很重要。不过有一点很奇怪,调用一次的设置标签器操作,依然会刷新树两次,这点比较诡异(treebiewer的源代码我看了,确实在里面会调用refresh操作)。...原创 2010-09-13 16:56:59 · 400 阅读 · 0 评论 -
HashSet源代码分析
HashSet里面主要是利用了HashMap的数据结构,我感觉挺简单的。所有的add,size,isEmpty等等都映射到了内置的成员变量map(是个HashMap或者LinkedHashMap)上,如add方法:[code="java"]public boolean add(E e) { return map.put(e, PRESENT)==null; }[/code...原创 2010-12-21 11:59:30 · 103 阅读 · 0 评论 -
HashMap源代码分析
今天看了一下HashMap的源代码,除了数学Hash部分没看懂,其他基本都看懂了。HashMap中其实主要使用一个数组来保存值的,一个对象在map中要想相等,有两个条件,第一个是它的哈希码必须相等,即在map的内部数组的桶索引必须相等,第二是它的key值也必须相等,因为map中是不允许存在key值相同的对象的。唯一看到一个地方感觉不爽的是containsValue方法,因为这个方法...原创 2010-12-22 17:15:27 · 86 阅读 · 0 评论 -
ArrayList源代码分析
有一个比较Tricky的地方是toArray方法,看下面的代码:[code="java"]public T[] toArray(T[] a) { if (a.length < size) // Make a new array of a's runtime type, but my contents: return (...原创 2010-12-23 10:28:03 · 86 阅读 · 0 评论 -
第一次profiling
原来以为是程序中某个地方内存对象一直占用而没有得到及时的释放,我用JProfiler tunning了半天,一直没找到具体的原因,后来查看操作人员的日志,,发生堆空间溢出的地方不同,在代码中有多处存在,但后来经过分析,这些地方的共同点是在new一个对象(包括对象数组)时,发生了堆内存溢出,这个问题对我来说不是难事,肯定是程序中产生了大量的对象导致,关键就是确定在什么地方导致了大量对象产生,...原创 2011-03-25 17:40:58 · 128 阅读 · 0 评论