玩转Java

玩转Java
posts - 22, comments - 22, trackbacks - 0, articles - 0

2008年8月12日

なつ休み。
奥运来了,暑假也来了。
今年真爽,奥运在ペキン举行,公司也真好在这段时间放暑假,可以天天待在电视跟前,见证中国金牌一块块诞生了,今年俄罗斯好像不太行呀,至今未获金牌,美国队实力还是很大的,田径和游泳,是金牌大户,也是美国队的强项,希望今年中国能夺得金牌总数第一,好运北京,好运中国。

posted @ 2008-08-12 15:59 玩转Java 阅读(55) | 评论 (0)编辑 收藏

2008年7月27日

最近在升级JDK版本后,启动Eclipse时候,遇到这样的问题:
JVM terminated.Exit code=1.
在网上找了些资料,找到了解决方法。
只要修改eclipse.ini文件即可。修改内容如下:
-startup
plugins\org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar
--launcher.library
plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.100.v20080509-1800
-showsplash
vm
D:\Java\jdk15011\bin\javaw.exe
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m
其中粗体部分为新增内容。

posted @ 2008-07-27 21:22 玩转Java 阅读(1850) | 评论 (2)编辑 收藏

2008年5月5日

注意,我这个西游,是指去山西和陕西。

4.30号上午,乘坐大巴,赶往机场,经过两个多小时的飞行,终于到达目的地:西安咸阳国际机场,下了飞机后,在导游的带领下,去西安大雁塔广场转了一圈,绕大雁塔广场转了一圈,广场上人特别多。那天西安特别热,有30度左右,逛了一会儿,就去住的地方了。

军安王朝大酒店,这个酒店条件还挺不错。回去后,由于一天的旅途,感觉特别累,洗完澡,就睡了。

5.1号,这天起了个大早,因为今天的旅程安排的比较紧张,首先去法门寺,去参观释迦摩尼的舍利子,去了之后,人太多了,听导游讲了这个舍利子的一些传奇故事以及释迦摩尼的传奇人生。
 

中午吃完饭,去参观唐永泰公主的坟墓,这永泰公主是武则天的孙女,由于私下议论武则天的私生活,被武则天知道后,乱棍打死,很残忍。后来,武则天死后,修的坟墓。

参观完永泰小姐的坟墓后,接下来就去参观武大姐下榻的地方了--乾陵。原来这陵是武大姐和她老公-唐高宗李治的合葬墓。规模相当庞大,神道比南京的明孝陵要大多了,神道旁边立着武则天的无字碑。

5.2号,今天的行程也比较紧张,要去参观华清池和兵马俑。首先去的是华清池,其实也没有什么,就是杨美人和李帅哥洗澡的地方,现在他们洗澡的地方也没有水了,就几个浴缸在那儿。还有老佛爷和老蒋去度假的地方,后来在那儿发生了西安事变,老蒋就在华清池里面的兵谏亭被软禁了,原来那亭子不叫兵谏亭,而叫捉蒋厅,后来为了缓和两岸关系,改名的。

参观完之后,接下来去了秦陵地宫,由于现在的技术还没有达到可以挖掘秦陵的程度,运用了遥感技术,模拟出来秦岭的形状,里面很黑,做的很逼真,秦始皇躺在一个棺材里面,旁边是水银做的河流,周围是一些秦始皇登基时的场景,匆匆的转了一圈,就出来了,最后就去参观兵马俑了,里面的人简直太多,老外好像比中国人多,这个博物馆也挣了老外不少钱呀,号称世界第八大奇迹。依次参观了三号,二号和一号炕,其中一号炕规模最大,当年,克林顿来的时候,曾经在里面拍照留念。参观完之后,当晚坐火车去山西平遥

5.3号,天刚蒙蒙亮,就在平遥火车站下车了,由于坐的火车比较破,晚上很热,没有睡好。人感觉比较困,刚出站,导游就带我们上车,绕古城转了一圈,介绍了一下平遥的一些历史知识,接下来就去吃早饭,吃完之后,直奔祁县,参观乔家大院,在那里曾经拍摄过连续剧 乔家大院 电影 大红灯笼高高挂,参观完之后,下午就去参观古城平遥了,也是世界文化遗产,号称明清时候中国的华尔街,中国第一家银行就在这儿诞生了

posted @ 2008-05-05 20:20 玩转Java 阅读(138) | 评论 (0)编辑 收藏

2008年4月23日

 

问题描述:

最近在做Eclipse插件开发的时候,在国际化的问题上遇到这样问题,比如我的plugin.xml文件中,通过%xxx来引用plugin_zh.properties中对应键xxx的信息时,在插件运行时,相应的信息显示不了,后来进过研究,发现是由于在MANIFEST.MF少配置了一项造成的

Bundle-Localization: plugin

而这一项配置我在Overview标签页上没有找到相应设置的地方,把这个在MANIFEST.MF加上,插件在运行时,就可以显示plugin_zh.properties中定义的消息了。

posted @ 2008-04-23 19:44 玩转Java 阅读(1115) | 评论 (0)编辑 收藏

  问题描述:

最近在Eclipse插件开发中遇到这样的问题,我使用如入扩展点

<extension
       
point="org.eclipse.debug.ui.launchConfigurationTabs">
    
<tab
          
class="com.example.launch.SqlDebugTab"
          group
="org.eclipse.jdt.debug.ui.launchConfigurationTabGroup.localJavaApplication"
          id
=" com.example.launchs.SqlDebugTab"
          name
="SqlDebugTab">
       
<associatedDelegate
             
delegate=" com.example.launch.SqlDebugLaunchDelegate">
       
</associatedDelegate>
    
</tab>
 
</extension>

<extension
          
point="org.eclipse.debug.core.launchDelegates">
       
<launchDelegate
             
delegate=" com.example.launch.SqlDebugLaunchDelegate"
             id
=" com.example.launch.SqlDebugLaunchDelegate"
             modes
="debug"
             type
="org.eclipse.jdt.launching.localJavaApplication">
       
</launchDelegate>
    
</extension>

 

也就是在调式Java Application的对话框中,增加一个Tab页,Tab页的名字为SqlDebugTab,在这个Tab页上增加几个复选框,复选框要显示视图的名称,如果用户选择某个复选框,点“Debug”后,将显示指定的视图,可是在com.example.launch.SqlDebugLaunchDelegate类中的launch方法中调用PlatformUI.getWorkbench().getActiveWorkbenchWindow(),得到的对象却为null,调试程序才发现,运行com.example.launch.SqlDebugLaunchDelegate类是,走的是新线程,也就是说点“Debug”按钮时,Eclipse平台启动的是新的线程(非UI线程),而在新线程中是取不到ActiveWorkbenchWindow对象,为了解决这个问题,花费了很多时间,最后终于找到解决方法,launch方法通过如下程序来显示视图,就可以解决上面遇到的问题:

PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
            
public void run() {
                IWorkbenchWindow window 
= PlatformUI.getWorkbench()
                        .getActiveWorkbenchWindow();
                
if (window != null){
                    window.getActivePage().showView(
"……");
}

}

}

posted @ 2008-04-23 19:41 玩转Java 阅读(890) | 评论 (0)编辑 收藏

2008年1月17日

要在编辑器中支持复制,粘贴功能,首先,要在编辑器中选择活动节点,Eclipse工作台的菜单中复制,粘贴按钮处于激活状态,要实现这功能,我们还必须做些配置,因为编辑器没有单独的菜单栏,所有编辑器共享一个菜单栏,前面我们在定义编辑器扩展点时,有一个属性contributorClass没有指定值,它的值应该是一个实现IEditorActionBarContributor接口的类的全名,只有指定这个属性,菜单栏中的菜单项才能够对我们在编辑器中所做的操作进行相应;
首先,我们增加属性contributorClass对应的类:
package com.example.workflow.actions;

import org.eclipse.gef.ui.actions.ActionBarContributor;
import org.eclipse.ui.actions.ActionFactory;

public class WorkflowActionContributor extends ActionBarContributor {

    @Override
    
protected void buildActions() {
        
    }

    
    @Override
    
protected void declareGlobalActionKeys() {
        addGlobalActionKey(ActionFactory.COPY.getId());
        
    }
    

}

在declareGlobalActionKeys增加对复制命令的申明,同时把属性contributorClass指定为这个类,包含全路径。再定义复制动作CopyAction,代码如下:

package com.example.workflow.actions;

import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.actions.ActionFactory;

public class CopyAction extends SelectionAction{

    
public CopyAction(IWorkbenchPart part) {
        
super(part);
        setId(ActionFactory.COPY.getId());
    }


    @Override
    
protected boolean calculateEnabled() {        
        
return true;
    }


}

 


注意构造函数中一定要把这个action的id设置为ActionFactory.COPY.getId(),和前面统一起来;

到这儿还没有结束,还必须在编辑器类中注册这个action,覆盖编辑器父类中的createActions()方法:

protected void createActions() {
    
super.createActions();

    CopyAction copyAction 
= new CopyAction((IWorkbenchPart) this);
    getActionRegistry().registerAction(copyAction);
    getSelectionActions().add(copyAction.getId());
}
但是当我们在复制按钮可用情况,点击之后,我们希望把我们选择的对象,拷贝到剪切板上,这个在其他软件中已经成功实现,但要是在我们开发的流程设计器中,要实现这个功能,我们还必须自己写代码来实现,必须重写CopyAction父类中的run方法,把我们选择的对象放到剪切板上,代码如下:
public void run() {
    Clipboard.getDefault().setContents(
super.getSelectedObjects());
}

这样当我们点复制按钮之后,流程设计器就把我们选择的内容放到剪切板上,下一步要做的就是粘贴了。

要使粘贴按钮可用,所做的修改和复制类似,在类WorkflowActionContributor 的方法declareGlobalActionKeys中增加addGlobalActionKey(ActionFactory.PASTE.getId())

增加PasteAction类,代码如下:

package com.example.workflow.actions;

import org.eclipse.gef.ui.actions.Clipboard;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.actions.ActionFactory;

public class PasteAction extends SelectionAction{

    
public PasteAction(IWorkbenchPart part) {
        
super(part);
        setId(ActionFactory.PASTE.getId());
    }


    @Override
    
protected boolean calculateEnabled() {        
        
if(Clipboard.getDefault().getContents()!=null){
            
return true;
        }
else{
            
return false;
        }

    }


}

这里对Paste菜单的可用性作了判断,只有当剪切板中内容不为空时,粘贴按钮才可用,否则为不可用状
态。
另外还要在编辑器中对这个action进行申明,
PasteAction pasteAction = new PasteAction((IWorkbenchPart) this);
getActionRegistry().registerAction(pasteAction);
getSelectionActions().add(pasteAction.getId());
到这里,当我们在编辑器中选择活动,选择复制之后,粘贴按钮可用,但点粘贴按钮具体做什么,我们还没有定义,要实现这个做什么功能,还必须覆盖PasteAction父类中的run方法:
public void run() {
        List list 
= (List)Clipboard.getDefault().getContents();
        
for(int i=0;i<list.size();i++){
            AbstractActivityEditPart part 
= (AbstractActivityEditPart)list.get(i);
            AbstractActivity model 
= (AbstractActivity)part.getModel();
            WorkflowProcess parent 
= (WorkflowProcess)part.getParent().getModel();
            AbstractActivity clone 
= new AbstractActivity();
            clone.setName(
"CloneActivity");
            clone.setLocation(model.getLocation());
            clone.setSize(model.getSize());
            clone.setFigure(model.getFigure());
            parent.addChild(clone);
        }

    }

这里只是做了一下简单处理,更复杂的逻辑用户可以根据自己应用的需要,这里的run可以通过执行一个命令,以支持撤销,重做功能,原理就是这样的,另外剪切功能和这类似,只是在复制基础上多了个删除操作。

posted @ 2008-01-17 08:27 玩转Java 阅读(1071) | 评论 (1)编辑 收藏

2008年1月16日

这节介绍如何在SSH框架中使用Validator框架,Validator框架采用基于xml文件来配置验证规则,它主要依赖两个jar包:commons-validator-1.3.0.jar和oro-2.0.8.jar,要在SSH使用Validator框架,必须把这两个jar包引用进来,其实Struts框架已包含这两个jar包,所以我们不用再单独引入了。
       要在SSH框架中使用Validator,更确切的说是在Struts框架中使用,可以采用插件机制把Validator加入到框架,这需要修改原来的struts-config.xml文件,增加配置ValidatorPlugIn插件,代码如下:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validation.xml"
 />
      
<set-property property="stopOnFirstError" value="true" />
 
</plug-in>
这样当应用启动时,Struts框架就会加载ValidatorPlugIn插件。
validator-rules.xml文件是Validator框架自带的,它定义了一些常有的校验规则,而validation.xml是我们自己定义的,它针对某个应用,内容如下:
    
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd"
>
<form-validation>   
 
<formset> 
    
<form name="registerForm">
      
<field property="register.username" depends="required">      
        
<arg key="register.username" position="0"/>      
      
</field> 
      
<field property="register.password" depends="required,minlength">      
        
<arg key="register.password" position="0"/>
        
<arg name="minlength" key="${var:minlength}" resource="false" position="1"/>
         
<var>
          
<var-name>minlength</var-name>
          
<var-value>6</var-value>
        
</var>     
      
</field>
      
<field property="register.email" depends="required,email">      
        
<arg key="register.email" position="0"/>      
      
</field>       
    
</form>   
 
</formset>
</form-validation>

 

form元素的name属性指定要进行验证的表单,field元素的property属性指定要验证属性,depends定义了验证方式,在这里,我们定义了username属性不能为空,password属性不能为空,并且最小长度不能小于6,email属性必须是合法的邮件地址。定义验证方式之后,我们还必须修改资源文件registermessages.properties,增加以下内容:

# Errors
errors.header=
<h3><fontcolor="red">ValidationError</font></h3>Youmustcorrectthefollowingerror(s)beforeproceeding:
errors.required={0}isrequired.
errors.minlength={0}cannotbelessthan{1}characters.
errors.email={0}isaninvalide-mailaddress.
这资源文件中{0}对应着<arg key="" position="0"/>,{1}对应着<arg key="" position="1"/>,以此类推,如果有验证错误产生,将用key的值替换{n}
 
此外,我们还要修改struts-config.xml文件,修改内容见粗体:

//把原来的DynaActionForm 改为DynaValidatorForm
<form-beans>
       
<form-bean name="registerForm"
           type
="org.apache.struts.validator.DynaValidatorForm">
           
<form-property name="register" type="test.register.entity.Register" />        
       
</form-bean>
    
</form-beans>
//把原来的validate="false"改为validate="true"
<action-mappings>
       
<action name="registerForm" path="/register" scope="request"
           type
="test.register.action.RegisterAction" validate="true"
           input
="/register.jsp">
           
<forward name="success" path="/registerSuccess.jsp" />
       
</action>
    
</action-mappings>

修改错误显示的样式,我们在register.jsp中,替换原来<html/errors>为
<logic:messagesPresent>
   
<bean:message key="errors.header"/>
   
<ul>
   
<html:messages id="error">
      
<li><bean:write name="error"/></li>
   
</html:messages>
   
</ul><hr />
</logic:messagesPresent>

注意在页面上加入
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>

这样,我们运行程序,校验失败的效果如图:

posted @ 2008-01-16 15:21 玩转Java 阅读(1231) | 评论 (1)编辑 收藏

     摘要:   到目前为止,一个完整的流程设计器已基本完成,为了增加系统的可扩展性,比如目前活动的类型有三种,假如以后我们要增加活动的类型,怎么办?按照目前的做法,我们只能修改代码,为了使系统的扩展性更好,即我们如果要增加活动类型,只需要修改配置文件,而无须修改现有系统的代码,为此,我们把活动类型定义一个扩展点,用户以后要增加活动类型,只需扩展这个扩展点就可以了。(代码) 在plugin.xml...  阅读全文

posted @ 2008-01-16 08:42 玩转Java 阅读(813) | 评论 (3)编辑 收藏

2008年1月15日

     摘要:  这一节主要介绍如何通过新建向导,来新建我们扩展的文件(.workflow),要在新建增加内容,必须扩展org.eclipse.ui.newWizards,因此我们要修改plugin.xml文件,增加内容如下:(代码下载) <extension          point="org.ec...  阅读全文

posted @ 2008-01-15 08:45 玩转Java 阅读(882) | 评论 (0)编辑 收藏

2008年1月14日

     摘要: 这一节主要介绍如何给编辑器增加属性页,属性页主要用来显示编辑器中选中对象的属性的,比如在编辑器选中活动,可以在属性页上显示活动的大小和位置等信息,要实现这一功能,首先要让模型实现IPropertySource接口,我们让模型的基类ModelElement实现这个接口,基类要实现这接口中六个方法,这六个方法如下: /** *//** An empty p...  阅读全文

posted @ 2008-01-14 08:59 玩转Java 阅读(1092) | 评论 (4)编辑 收藏