用ActionListener处理在JTextField里按Enter事件

sulong 于 2007-11-10 没有评论 »

常常有这样的需求,填完一些JTextField后,直接按Enter键就执行动作,而不需要再按一下按钮。本来以为在加一个Keytyped事件的侦听器,然后读取输入的字符就可以确定了,但是试了几次都没有成功。后来查了一下JDK API,看到这样的话:

How the text field consumes VK_ENTER events depends on whether the text field has any action listeners. If so, then VK_ENTER results in the listeners getting an ActionEvent, and the VK_ENTER event is consumed. This is compatible with how AWT text fields handle VK_ENTER events. If the text field has no action listeners, then as of v 1.3 the VK_ENTER event is not consumed. Instead, the bindings of ancestor components are processed, which enables the default button feature of JFC/Swing to work.

看来是要用ActionLinstener, 如没有用的话,就会传给上层组件。

  • Share/Bookmark

JNDI中的组件私有环境,公共环境和部署时映射

sulong 于 2007-11-07 没有评论 »

j2ee难用,其中一个原因是jndi不好用,明明已经配置好名字为dataSource的数据源,但是在部署JPA时,老是抛异常说找不到数据源。今天在用jboss时,终于又明白了一些。

原来j2ee中的组件是有它自己独自的环境的,位于java:/comp/env这个jndi目录下。每个组件不能访问另外一个组件的私有环境,实现组件各自独立。同时,又有一些jndi目录和名字是公共的,如java:/下的其它一些名字,还有一些是只能给本地访问的,还有一些是能够给远程访问的,这个就不说了。

如果一个组件想要获得另外一个组件,那么需要在它的部署描述符里说明,比如:

<resource-ref>
  <description>Dollys DataSource</description>
  <res-ref-name>jdbc/mydatasource</res-ref-name>
  <res-ref-type>javax.sql.DataSource</res-ref-type>
  <res-auth>Container</res-auth>
</resource-ref>

这里说这个组件需要依赖于一个叫java:/comp/env/jdbc/mydatasource的数据源。但是这个数据源又从哪里来呢??!!注意了!原来是要在部署时写另外一个特定于服务器种类的数据源映射文件,如下面的jboss示例:

<resource-ref>
   <res-ref-name>jdbc/mydatasource</res-ref-name>
   <jndi-name>java:DefaultDS</jndi-name>
</resource-ref>

上面这一段可能位于jboss-web.xml等jboss特定的部署描述符里。目的就是告诉jboss,把全局的java:DefaultDS映射到这个组件的java:/comp/env/jdbc/mydatasource。就是这一步,很时候之所以部署失败,找不到jndi都是因为少了这样一个映射导致的。

如果不想写上面的特定于服务器的部署描述符,我估计可以通过指定一个公共的jndi来解决,如下:

<resource-ref>
  <description>Dollys DataSource</description>
  <res-ref-name>java:DefaultDS</res-ref-name>
  <res-ref-type>javax.sql.DataSource</res-ref-type>
  <res-auth>Container</res-auth>
</resource-ref>

问题虽然解决了,可是突然觉得好恶心,搞得这么复杂有必要吗?!!j2ee果然不是为了做小项目来的。

  • Share/Bookmark

nohup : linux下让程序在用户登出后继续运行

sulong 于 2007-11-02 没有评论 »

为了能让程序在用户登出后继续运行,在命令前加上 nohup命令,如下:

nohup do_something_cmd  &

如果要运行的程序是服务程序,则不需要加。

  • Share/Bookmark

jboss指定绑定IP

sulong 于 2007-11-02 没有评论 »

运行jboss时如果不指定绑定IP,它会默认绑定localhost,这样从其他ip地址将无法访问。要解决这个问题,只要在启动时加参数如下:

run.sh -b <要绑定的ip>
  • Share/Bookmark