想选一种动态语言+跨平台界面组件的组合,希望大家给点意见

原来只是关注过跨平台组件的选择对比,有 GTK、wxWidgets、Qt、AWT/SWING、SWT。

GTK 是 GNOME 的实现组件

wxWidgets 对于用过 MFC 的人来说用起来很顺手

Qt 是 KDE 的实现组件

AWT/SWING 无需多说,SWT 相信也为 Java 开发人员熟知了。

曾得益于 VC 写的程序小巧且基本上拷个 EXE 文件到别人机器上就能运行,所以希望还是用 C++ 来编写界面程序,所以考虑过 wxWidgets 和 Qt。后来发现这两个组件的动态库的个头也不小,即使在客户端安装个 JRE 又何妨,何况 JAVA+SWT 的程序与 wxWidgets/Qt 的本地程序速度上差别已不大。综上,如果仅仅是跨平台的界面程序个人看重 JAVA+SWT 了,SWING 给我产生的欲望还不大。 阅读全文 >>

JDBC 连接 Oracle 时,用 rs.absolute(n) 真的不如 n 次 next() 性能好

前面写过一篇:Oracle 驱动版本引起的显示字段奇怪编码问题。讲到因 Oracle 8.0.5 不支持子查询排序,为改善原来那种每次翻页时都捋出所有数据成对象到 List 中,然后从中拣取页面实际要显示的记录的性能问题时,采用了 rs.absolute() 直接跳到起始记录游标的方法,但又引入了乱码问题,例如:"无效",变成了 "0xE697A0E69588"。

虽说,换个驱动,如 8.1.7.0.0 以上版本的驱动就能解决乱码的问题,但这一换又怕会影响到其他的应用。有朋友评论说,其实循环 next() 到某处比 absolute() 定位要好,乍一看,有些牵强,不过试试就知道了。下面就来做样一个测试,测试代码如下: 阅读全文 >>

碰到一个不知如何解释的 Java 控制台程序的内存问题

有一 Java 控制台程序,启动经过一段时间之后从 Windows 任务管理器里看它所占用的内存稳定在 540M 左右。

启动参数是:-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128

但只要你把那个控制台窗口最小化后,观察到的内存用瞬间下降到 100 多M,有时候甚至是几十M。然后不管是窗口保持最小化还是恢复了,它所占用的内存又以几十M几十M的上扬,直至先前的 540 M 左右。每次最小化窗口都可以观察到这种现象。

控制台窗口的参数:屏幕缓冲区大小:宽 120;高 300。窗口大小:宽 120;高 40。

不知道在控制台窗口最小化那时,JVM 做了些什么事情能让内存骤降下来,而复又升回去。

Oracle 驱动版本引起的显示字段奇怪编码问题

开门见山把产生问题的原因的解决办法列出来。

我们一般获取 Statement 都是通过 conn.createStatement() 方法,很少传递参数给它的,所以其内置属性都取默认值的,取记录只用 while(rs.next()) 逐个取即可。然而有一个需求(Oracle 8i 之前的版本不支持子查询排序,所以无法用 rownum 取分页记录) 是通过如下代码来得到 Statement:

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

由它获得的结果集可以 rs.absolute(n) 直接跳到第 n 行记录来获得值,但就这个用法出问题了,取出来的中文出现乱码了,如 "无效",变成了 "0xE697A0E69588" 阅读全文 >>

Hibernate3调用存储过程用法

直接以一个例子在说明,如DB2中有一个简单存储过程 selectAllUsers

映射文件中关于存储过程内容如下 阅读全文 >>

Struts2 action 的 ;jsessionid=xxx 使找不到页面 Bug 的解决

在 Websphere Application Server(WAS,我用的还是 WAS 5.1,所以用的 Struts2 也是 j4 版,恐怕很难再找到像我这样在 JDK 1.4/Servlet 2.3/JSP 1.2 下用 Struts2 的了) 部署的第一个 Struts2 的应用没有出什么问题。可是在另一个 WAS 下部署的 Struts2 应用却有些问题(说明:Struts2 的版本都是 struts-2.0.11.1),所有用了 <s:url url=…/> 或 <s:form action=…/> 来生成的 URL 都带了个 ;jsessionid=xxx,如:

<script src="/unmi/js/sys_cal.js;jsessionid=0001bosAgxaO_kxlHCbjS1AMxTu:11mijgptm">

<img src="/unmi/images/img_btn.gif;jsessionid=0001bosAgxaO_kxlHCbjS1AMxTu:11mijgptm"/>

<a href="https://yanbin.blog/unmi/storeSubinvRelate!toUpdate.action;jsessionid=0001bosAgxaO_kxlHCbjS1AMxTu:11mijgptm?model.id=162"> 阅读全文 >>

Struts2 的 struts.xml 配置中 namespace 的使用

Struts2 的 struts.xml 中是分 package 配置的,可以为 package 设置 namespace 属性,如

<package namespace="/secure"   ....>
    ......
</package>

如果没有指定 namespace 属性,默认 namespace 是 ""。使用 namespace 可以方便于按不同目的规划对应用的访问规则。比如不同 namespace 下配置了不同的拦截器就可以实现权限的控制,如 "/secure" 下已登陆用户才能访问,"/public" 下可公开访问的。 阅读全文 >>

Unmi 的 Struts2 学习笔记(十四)

生活中常为一些无伤大体之事优柔寡断,譬如买羽毛球拍是方头的还是圆头的呢?电子产品是这款好还是那款好呢?拿此又放下,举彼又放下,最后靠概率来决定。取其一,少段时间内总有些戚戚然,而后全然无所谓。小事无碍,大事可就会后悔不及,无疑亦会让许多机会径直溜去。

1. 从此开始学习 Struts2 对 Ajax 的支持。这也是 Struts2 新注入的元素。Struts2 的 Ajax 支持是建立在 Dojo 和 DWR 基础之上的。提供了 Ajax 的输入检验,表单提交;pub-sub 事件模型、自动完成以及与 JSON 的使用等功能。

2. 在 Struts2.0.6 和 Struts2.0.11 的 apps/struts-showcase-2.x.x.war 中的 dwr 包都还是 dwr-1.1-beta-3.jar,当前 DWR 最新版是 2.0,前一个稳定版是 1.1.4,所以正式应用可用 1.1.4 版,若用 2.0 DWR 需做充分的测试。Struts2 的 Ajax 支持是建立在 ajax 主题上的,ajax 是扩展了 xhtml 主题。 阅读全文 >>

Unmi 的 Struts2 学习笔记(十三)

柏杨在形容中国人不团结,喜欢窝里斗用了这样的话:每一个中国人都是一条龙,但是三个中国人加在一起──三条龙加在一起,就成了一条猪、一条虫,甚至连虫都不如--《丑陋的中国人》。可是他老人家走得走,要是能多有半个月的阳寿,不知作有何感想。

1. <s:optiontransferselect.../> 正是考虑到通常使用而新加的用于创建两个下拉框,可以来回移动列表项。有属性设置是否显示 "选定左移"、"全部左移"、"选定右移"、"全部右移" 按钮以及各按钮上的文本,其他的 list/listKey/listValue/doubleList/doubleKey/doubleValue 等属性同 <s:doubleselect.../> 的是一样的。还可设置 allowUpDownOnLeft/allowUpDownOnRight 是否出现相应框的上下移动选择的按钮(true/false)。

2. <s:radio.../> 的用法与 <s:checkboxlist.../> 完全一样,只页面表现不一样,一个多选,一个单选。 阅读全文 >>

JSP 的 errorPage 指令异常转向错误页的实现机制及应用

如有 index.jsp 页,当出现后服务器端异异常时要转向到 errorPage.jsp,并在 errorPage.jsp 中把对应错误信息显示出来。我们需要在这两个页面分别加上指令 errorPage="errorPage.jsp"isErrorPage="true"

index.jsp

阅读全文 >>