BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Bea workshop 3.3出来了,连忙上网下载升级,文件不到170多M,用FlashGet很快就下载了。

安装后试用,发现Workshop Studio Facet Libraries全是空的,和以前的版本一样需要联网下载。从BEA的网站下载速度不敢恭维,巨慢无比,真让能受不了!!

Bea为什么不把facet libraries直接做到安装文件中呢,担心安装包太大?大点没有什么的。这点JB就做得很好,把需要的库都做进光盘了,不需要你再去寻找下载。

希望workshop下个版本能预装些libraries!

posted @ 2006-12-22 13:18 keith 阅读(1271) | 评论 (3)编辑 收藏

都市行 - 在线获取注册码 (完全免费)

序列号:
E-mail:



在线获取注册码地址:http://www.dushixing.com.cn/other/reg.jsp

posted @ 2006-12-15 10:43 keith| 编辑 收藏

自都市行发布以来,得到了广大网友的热心支持。都市行1.2版开发工作基本完成,先发布个测试版供大家测试,如果没有太大问题,正式版不久就和大家见面了,同时也会提供最新的数据。

测试版中包括20个城市的测试数据(正式版发布会加入更多的城市数据):安庆,北京,长沙,成都,重庆,大连,佛山,广州,杭州,济南,昆明,南京,青岛,上海,沈阳,深圳,苏州,天津,武汉,乌鲁木齐

文件比较大,有八百多K,如果你的手机性能或空间有限可以用Winrar打开CityBus1.2Beta.jar,删除不需要的城市数据(数据存放在bus\db\),例如删除北京的数据,则删除bus\db\BeiJing整个目录就可以了。

功能特点:
●提供多城市版本。(NEW)
●支持双向数据(即分上下行)。(NEW)
●进一步优化数据加载方式,占用内存比上个版本小不少。(NEW)
●基于J2ME架构,大部分MIDP-2.0 CLDC-1.0/CLDC-1.1的手机都能使用。
●优化的数据结构,查询更快。
●支持按线路查询、过站查询、换乘查询。
●引入公交(地铁)营运时间,可对不在班的线路进行过滤。

系统要求:
 大部分MIDP-2.0 CLDC-1.0/CLDC-1.1的JAVA手机都可以使用。

下载地址:
1.2正式版已发布,测试版停止下载。

posted @ 2006-12-15 10:41 keith 阅读(6408) | 评论 (72)编辑 收藏

使用JfreeChart开发图表经验总结(含源码)
Keith He  2005年10月27日


最近,公司一项目要出很多的图表。由于项目是B/S架构的,所以生成的图表也要考虑能在浏览器上动态显示。

生成基于浏览器的图表方式比较多。据我所知道的,常用的有三种:
1、VML方式实现。这种方式是通过产生客户端的代码,由客户端根据代码生成相应的图表。但这种方式产生的图表有很多的局限性,如受限于浏览器,有些浏览器可能并不支持VML。另外,没有封装完整的图表开发包。
2、通过applet来产生图表。这种方式也对客户端要求比较高,必须要有JRE,而且通过applet生成的图表在加载过程中会有个Java的Log动画。用户看了可能会感觉不太舒服。
3、通过服务端直接生成图表的图片。这种方式对客户端几乎没有什么要求,缺点是加重了服务端的负担,对服务端要求就相对高了点。

经过比较,根据项目自身特点,我们打算采用第三种方式来开发图表。为了缩短开发周期、节约成本,我们选用了开源的JFreeChart(http://www.jfree.org/jfreechart/)。

jfreechart是一个免费创建图表的java工具,目前最新版本是JFreeChart-1.0.0-rc1。它可以生成各式各样的图表。这些图表包括饼图、柱状图、线形图、区域图、甘特图等等,基本可以满足各种项目的要求。但在开发过程中我也发现了JFreeChart的一些不足,或者说有些称得上是BUG。总体说来,JFreeChart还是个优秀的开源项目。

关于JFreeChart生成图表的文章比较多了,我主要谈谈使用JFreeChart的一些比较棘手问题以及解决方法。同时也会将问题所用到的源码(JFreeChart-1.0.0-rc1+Struts1.2.4)从项目中抽象出来一起提供给大家。

一、 图片上热点链接中文乱码的解决方法

这个问题是在我查阅关于JFreeChart相关资料时出现频率最高的一个问题。其实这个乱码问题不能怪罪于JFreeChart。有人甚至就因此认为JFreeChart对中文支持不太完善,JFreeChart可要叫了:我是冤枉的!

我们来找出问题产生的原因,这个问题也就不难解决了。

首先查看一下出现问题页面的Html源文件,你会发现在源文件的开头多出了一段map代码,代码类似于这样:

<map id="chart-30928.png" name="chart-30928.png">
<area shape="poly" coords="179,163,176,154,174,145" title="洗衣机=315(29.86%)" alt=""/>
…………
</map>

<html>
<head>
…………


这部分map代码其实是JFreeChart产生的,是用来产生图片上的热点链接,这也是问题产生的根源所在。你的Jsp页面通过<%@ page contentType="text/html; charset=UTF-8" %>或者<%@ page contentType="text/html; charset=GBK" %>来设置contentType这无可厚非,但map并不是由这个jsp页面产生的。它是JFreeChart通过PrintWriter产生的。查看一下你生成图片的Chart源码,其中有ChartUtilities.writeImageMap(pw, filename, info, false)这样的语句。这是用来向页面写入map代码的。默认情况下,map代码会以服务器默认编码(ISO-8859-1)输出。这就和你的Jsp编码不一致,从而产生乱码。

原因找到了,问题也就不难解决的。设置PrintWriter的contentType与Jsp的contentType保存一致就可以了。代码如下(笔者的Web应用是基于Struts框架的):

//PieMothAciton.java

    
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            
throws Exception {    
        
        
//设置输出编码格式
        response.setContentType("text/html;charset=UTF-8"); 
        PrintWriter out 
= response.getWriter();
        
        …………
        
        String filename 
= chart.generatePieChart3D("月统计比例图"
                session, out);
        
        String graphURL 
= request.getContextPath() 
                
+ "/servlet/DisplayChart?filename=" + filename;
        
        request.setAttribute(
"filename",filename);
        request.setAttribute(
"graphURL",graphURL);
        
        
return mapping.findForward(SUCCESS);        
    }


重新部署你的Web应用,中文乱码文件就可以解决了。

二、 饼图显示百分比

在饼图中JFreeChart默认只显示选项和数值,没有显示各项所占比例。由于手头没有1.0版的JFreeChart Developer Guide(这可是要钱的,后来想想即使有,也未必能找到关于百分比这方面的说明),再加上DEMO中的饼图都没有显示百分比,无法参考。后来在网上找到了一个老版本的例子,其中能显示百分比。它是通过在PiePlot中设置的:

PiePlot pie;
pie.setPercentFormatString(
"#,###0.0#%");

但1.0版本中根本就找不到setPercentFormatString这方法,JFreeChart各版本之间改动比较大,很难兼容。还好它是开源的,把它的源码都搜索了一遍,认真读了一些源码,终于理出了头绪。

原来在1.0.0-rc1版中显示百分比已经调整到StandardPieItemLabelGenerator构造函数中了,StandardPieItemLabelGenerator有三个构造函数。StandardPieItemLabelGenerator()不显示各项所占比例。另外两个可以显示比例。代码如下:

plot.setLabelGenerator(new StandardPieItemLabelGenerator(StandardPieItemLabelGenerator.DEFAULT_TOOLTIP_FORMAT));
//或者采用下面自定义样式显示,{0}表示选项,{1}表示数值,{2}表示所占比例
plot.setLegendLabelGenerator(new StandardPieItemLabelGenerator("{0}: ({1}M, {2})"));

效果如下图:



默认显示百分比是取整的,如果要让百分比保留二位小数,可以用第三个构造函数:
plot.setLabelGenerator(new StandardPieItemLabelGenerator(“{0}={1}({2})”,
                    NumberFormat.getNumberInstance(),
                    
new DecimalFormat("0.00%")));

效果如下图:



三、 混合图表(不同类型的图混合显示)

我们经常用的是柱状图、曲线图、和饼图,这三类型图基本能满足大部分项目的需求。但有些项目比较特殊,可能需要在一张图上同时显示不同类型的图。这在JFreeChart中可以轻松实现。例如我们要做个流量监控的系统,该系统一天中在不同的时间段有不同的阀值(最大值),该阀值表示成阶梯线。而实际流量就是个曲线了。当流量在某个时段内超过阀值时就触发相应的事件(如限流)。要表示阀值和流量的对比关系就需要两种类型的图片在同一张图表上表示,如下图:



首先像创建普通图表一样来创建图片,笔者先创建了一个XYStep Chart。然后创建第二图表的Renderer,再分别将第二图表的Dataset、Renderer添加进第一图表的plot。实例代码如下:

//MultipleChart.java

JFreeChart jfreechart 
= ChartFactory.createXYStepAreaChart("监控设置"
                
"时刻"
                
"流量"
                xydataset, 
                PlotOrientation.VERTICAL, 
                
true
                
true
                
false);
        
        XYPlot xyplot 
= jfreechart.getXYPlot();

…………

        
//设置第二图表的Renderer
        StandardXYItemRenderer standardxyitemrenderer = new StandardXYItemRenderer();
        standardxyitemrenderer.setToolTipGenerator(
new StandardXYToolTipGenerator("{0}({1}) = {2}"
                
new SimpleDateFormat("HH:mm"), 
                
new DecimalFormat("#,##0")));        
        
        
//将第二图表的Dataset、Renderer添加进xyplot
        xyplot.setDataset(1, lineDataset);
        xyplot.setRenderer(
1,standardxyitemrenderer); 


这样就创建了曲线和阶梯的混合图表。

四、 其它问题

1) 版本问题。
JFreeChart的各版本变动比较大,这在升级版本时是比较头疼的问题,升级时需要改动你代码的地方可能比较多。因此尽量采用最新的版本,新版本的文档可能比较少,但问题要相对少一些,在旧版中就出现过标注数值重叠在一起这样的问题。好的是JFreeChart是开源的,碰到解决不了的问题可以从源码中找到有参考价值的信息。

2) 设置背景透明度的BUG
不知道这是不是JFreeChart的一个BUG。利用chart.setBackgroundImageAlpha(0.5f)来设置背景透明度,ServletUtilities.saveChartAsPNG保存图片。将chart.setBackgroundImageAlpha(0.5f)注释掉再生成图片,发现两张图片是一样的。也就是说setBackgroundImageAlpha方法无效,具体原因笔者还不太清楚,读者大家可以自己测试看看。

以上是笔者在项目开发中总结出来的,希望大家多提宝贵意见!

附源码:JFeeChartProject_src.rar (链接已失效)

posted @ 2006-10-25 17:08 keith 阅读(19695) | 评论 (51)编辑 收藏

下午,掏了10块钱,塞到自动售货机的投币口。1秒钟后退出来了,难道是假币?
不甘心,又试了5、6次,它都不认。
仔细看了看那10块钱,怎么也不像假币,还特别新呢。
我把钱揉了揉,展开,重新塞进去,居然认了~~
“真贱!!”我说道。
门卫听了在一边偷偷地笑!

posted @ 2006-10-19 16:18 keith 阅读(1311) | 评论 (5)编辑 收藏

自都市行V1.1.0版推出后得到了广大网友的热心支持,给我提供了不少有用的建议,在这里谢谢大家!
下个版本,也就是1.2版,都市行将做如下主要改进:

1、提供多城市版本。
2、支持双向数据(即分上下行)。
3、优化一下查询方式,解决一些手机Heap-Size太小问题,但这样会导致查询速度下降。目前1.1版的查询速度经测试还是相当快的。

希望各位热心网友给新版本多提些建议,谢谢!

posted @ 2006-10-16 11:15 keith 阅读(4539) | 评论 (28)编辑 收藏

将都市行重新打包了一下,主要针对MIDP-2.0 CLDC-1.0的手机。如果是CLDC-1.1的手机安装CLDC-1.0的程序会不会提示“版本无效”?赶兴趣的朋友可以安装CLDC-1.0版试试,告诉我一下能否正常安装。至少我的N72(CLDC-1.1的)安装CLDC-1.0的没有问题。

下载地址:
1.2正式版已发布,本版本停止下载。

posted @ 2006-10-16 10:39 keith 阅读(5696) | 评论 (52)编辑 收藏

2006年10月10日 感谢热心网友醉解兰舟提供了广州数据,下载地址:
http://www.blogjava.net/fastpace/archive/2006/10/08/73721.html

posted @ 2006-10-10 16:03 keith 阅读(304) | 评论 (3)编辑 收藏

2006年10月9日 感谢热心网友提供了苏州数据,安装文件已更新了。苏州的朋友请到这里重新下载:http://www.blogjava.net/fastpace/archive/2006/10/08/73721.html

posted @ 2006-10-09 10:08 keith 阅读(2197) | 评论 (2)编辑 收藏

目前的《都市行》数据是网上收集来的,难免有不全或错误的地方。如果您有新的数据文件,请通过本帖评论或者E-mail:fastpace@163.com(注意此处的@为中文@,发邮件时需要换成英文的@)提交给我。以便将《都市行》逐步完善!

格式最好能提供如下格式,如果您整理起来比较困难,可以发给我来整理,但希望数据能整齐点,便于整理。可以是EXCEL、数据库、文本等等。

谢谢!

附数据文件格式:
###########################################################
# 格式:线路名称|运营时间|备注 
= 站点1,站点2,......
# 对营运时间说明:*表示不考虑,
00:00-24:00表示24小时营运
# 营运时间必须是xx:xx-xx:xx格式
#
# $城市名称
###########################################################


$北京

001路|
5:00-7:00= 马官营,六里桥北里,公主坟南站,公主坟,军事博物馆,木樨地,工会大楼,南礼士路,复兴门,西单,中山公园,天安门,东单,北京站口,日坛路,永安里,大北窑,郎家园,八王坟,四惠站
001路区间车|*| 
= 公主坟,军事博物馆,木樨地,工会大楼,礼士路,复兴门,西单,中山公园,天安门,东单,北京站口,日坛路,永安里,大北窑,郎家园
002路|
5:00-7:00= 海户屯,木樨园,沙子口,永定门,天桥,大栅栏,前门,天安门,东华门,妇产医院,沙滩,宽街
004路|
5:00-6:00|5:00-6:00 = 靛厂新村,靛厂,吴家村路,马官营,马官营东站,六里桥北里,公主坟南站,公主坟,军事博物馆,木樨地,工会大楼,南礼士路,复兴门,西单,中山公园,天安门,东单,北京站口,日坛路,永安里,大北窑,郎家园,八王坟,四惠站
005路|
5:00-5:20|5:00-5:20 = 德胜门,德胜门南站,果子市,甘水桥,铸钟厂,鼓楼(东城),地安门,景山后街,西板桥,北海,西华门,南长街,前门北站,前门,珠市口,板章路,虎坊桥西,果子巷,菜市口,牛街,广安门,广安门南站,椿树馆街,鸭子桥北里,菜户营北,菜户营
006路|
0:20-2:40|全程1元(部分车不停关厢) = 丽泽桥,西局,六里桥南里,六里桥,莲花池(北京西站),湾子,甘石桥(广安门外),达官营,关厢,广安门,牛街,菜市口,果子巷,虎坊桥,永安路,友谊医院,天桥,金鱼池,天坛北门,红桥,法华寺,体育馆西路,北京体育馆,北京游乐园

posted @ 2006-10-08 14:24 keith 阅读(3620) | 评论 (24)编辑 收藏

仅列出标题
共4页: 上一页 1 2 3 4 下一页