一条老狗

           老狗拉破车
posts - 12, comments - 11, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2010年9月24日

今天由XNA3.0升级到4.0,竟然报错:

No suitable graphics card supported. Could not find a Direct3D device that supports the XNA Framework HiDef Profile.

原来是因为我的显卡不支持DirectX 10,在工程属性中把Hidef修改为Reach即可。

http://msdn.microsoft.com/en-us/library/ff604995.aspx

posted @ 2010-09-24 21:07 一条老狗 阅读(4012) | 评论 (2)编辑 收藏

2007年10月24日

JIRA插件开发的工作本早已结束。
但近日有个朋友来问,如何在IssueNavigator显示时,显示用户的帐号名(username),而不是其FullName。

当时我为他提供了两种思路:

思路1。写一个自定义字段插件,这个插件就是按用户名来显示报告者及被分派者。
然后再自定义问题导航栏,把你的自定义字段添加进去即可。

思路2。继承并覆盖问题导航功能的Action,直接修改其显示的数据。

这个问题挺有意思,今日闲来无事,对第二种思路写了点代码来实现一下。

首先我们继承IssueNavigator类:

public class IssueNavigator extends com.atlassian.jira.web.action.issue.IssueNavigator {

    
private boolean convertedResults = false;
    
public SearchResults getSearchResults() throws SearchException {
        SearchResults results 
= super.getSearchResults();
        
if (!convertedResults && results != null{
            convertedResults 
= true;

            List issueList 
= results.getIssues();
            
for (int i = 0; i < issueList.size(); i++{
                com.atlassian.jira.issue.DocumentIssueImpl issue 
=
                        (com.atlassian.jira.issue.DocumentIssueImpl)issueList.get(i);

                Document document 
= null;
                
try {
                    Field f 
= issue.getClass().getDeclaredField("document");
                    f.setAccessible(
true);
                    document 
= (Document)f.get(issue);
                    f.setAccessible(
false);
                }
 catch (NoSuchFieldException e) {
                    e.printStackTrace();
                }
 catch (IllegalAccessException e) {
                    e.printStackTrace();
                }


                DocumentIssueImpl newIssue 
= new DocumentIssueImpl(
                        document,
                        ComponentManager.getInstance().getConstantsManager(),
                        ComponentManager.getInstance().getFieldManager(),
                        ComponentManager.getInstance().getIssueManager(),
                        ComponentManager.getInstance().getIssueFactory(),
                        ComponentManager.getInstance().getAttachmentManager(),
                        ComponentManager.getInstance().getProjectFactory()
                );

                issueList.set(i, newIssue); 
            }

        }


        
return results;
    }


}

然后覆盖其 getSearchResults() 方法,将issueList中的对象换为我们的新对象(DocumentIssueImpl)。
注意: 这里面为了取回document对象,使有了反射。或许有其它办法,这里只做一个测试,不考虑其它问题。

为此,我们需要再继承一个类 DocumentIssueImpl:
public class DocumentIssueImpl extends com.atlassian.jira.issue.DocumentIssueImpl {

    
private User resetUserFullName(User user) {
        user.setFullName(user.getName());
        
return user;
    }


    
public User getAssignee()
    
{
        
return resetUserFullName(super.getAssignee());
    }


    
public User getReporter()
    
{
        
return resetUserFullName(super.getReporter());
    }

}

然后我们覆盖其 getAssignee() getReporter() 方法,把username赋值给fullname
这样当调用 getFullName 时返回的就是 username了。

然后插件配置文件中覆盖IssueNavigation Action

<action name="xxx.IssueNavigator" alias="IssueNavigator">
    
<view name="success">/secure/views/navigator/navigator.jsp</view>
    
<view name="error">/secure/views/navigator/navigator.jsp</view>
</action>

完成!

posted @ 2007-10-24 11:40 一条老狗 阅读(2135) | 评论 (0)编辑 收藏

2007年8月9日

如果一个单元格的类型不是文本,而是数字该如何清空它呢?

public void setCellValue(double value)

此函数并不能清受NULL,该如何把这个单元格变成空白呢?
方法很简单:

cell.setCellType(HSSFCell.CELL_TYPE_BLANK);

把它的类型改为 HSSFCell.CELL_TYPE_BLANK 即可。

posted @ 2007-08-09 10:35 一条老狗 阅读(2744) | 评论 (0)编辑 收藏

2007年7月27日

以下是官方的一个例子:

    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet s 
= wb.createSheet();
    HSSFRow r 
= null;
    HSSFCell c 
= null;
    HSSFCellStyle cs 
= wb.createCellStyle();
    HSSFFont f 
= wb.createFont();
    HSSFFont f2 
= wb.createFont();

    cs 
= wb.createCellStyle();

    cs.setFont( f2 );
    
//Word Wrap MUST be turned on
    cs.setWrapText( true );

    r 
= s.createRow( (short2 );
    r.setHeight( (
short0x349 );
    c 
= r.createCell( (short2 );
    c.setCellType( HSSFCell.CELL_TYPE_STRING );
    c.setCellValue( 
"Use \n with word wrap on to create a new line" );
    c.setCellStyle( cs );
    s.setColumnWidth( (
short2, (short) ( ( 50 * 8 ) / ( (double1 / 20 ) ) );

    FileOutputStream fileOut 
= new FileOutputStream( "workbook.xls" );
    wb.write( fileOut );
    fileOut.close();

 

这里它是使用 r.setHeight((short)0x349) 写死了行高的,如何根据实际内容自动计算出其行高呢?
我们可以不设置其行高,此时Excel能够正确显示出来,但看上去太挤,不好看。
我是希望在文字需要占的实际行高基础上再加上一些空白,这样才好看。
但此时调用 r.getHeight() 取不到值。

我想这个需求可能是实现不了了。

 

posted @ 2007-07-27 14:22 一条老狗 阅读(4070) | 评论 (2)编辑 收藏

1、桃源话很奇特,尾音很高,比如“局”,便发音成了“猪”。

  先到县委宣传部,联系到人事局采访。宣传部的人打电话替我预约,用免提。

  宣传部:“喂,你人是猪吗?(人事局)”

  对方:“不是,你搞错了。我不是人是猪(人事局),我娘是猪(粮食局)。”

  我拼命忍住笑,肚子都疼了。

  第二天参加一个县政府的汇报会。会前点名。

  主持人:“哪些单位到了?”

  于是参会者一个个地自报家门:

  “我是公阉猪(公安局)。”

  “我叫肉猪(教育局)。”

  “我有点猪(邮电局)。”

  “我是典型猪(电信局)。”

2、话说湖南一个口音很重的县长到村里作报告: 

  “兔子们,虾米们,猪尾巴!不要酱瓜,咸菜太贵啦!!”
  (翻译:同志们,乡民们,注意吧!不要讲话,现在开会啦!!) 

  县长讲完后,主持人说:“咸菜请香肠酱瓜!”
  (翻译:现在请乡长讲话!) 

  乡长说:“兔子们,今天的饭狗吃了,大家都是大王八!”
  (翻译:同志们,今天的饭够吃了,大家都使大碗吧!) 

  “不要酱瓜,我捡个狗屎给你们舔舔。。。”
  (翻译:不要讲话,我讲个故事给你们听听。。。)

posted @ 2007-07-27 09:45 一条老狗 阅读(362) | 评论 (0)编辑 收藏

2007年7月13日

POI的基本操作,请参看 http://blog.java-cn.com/user1/6749/archives/2005/18347.html

sheet有现成的方法实现clone

但如何克隆一行,一列呢?找了找好像没有现成的方法可用。

只有一列一列的复制其属性,一些基本属性倒是可以复制,如对齐、字体、边框、背景色、CellType等

但如何复制Cell的"条件格式"呢???困惑中。。。

posted @ 2007-07-13 17:19 一条老狗 阅读(1475) | 评论 (0)编辑 收藏

2007年7月12日

大家都知道,JIRA是一个优秀的问题跟踪系统。
但它不一定就能完全满足你的需要,比如导入Excel方式提交的BUG。
值得庆幸的是,JIRA提供了强大的插件开发功能,现说一说我的一点小经验。

准备: JIRA3.9,  JIRA SDK,  IDEA / Eclipse, 熟悉Java(废话),  熟悉WebWork
资料: http://confluence.atlassian.com/display/JIRA/JIRA+Development+Hub
官方资料可能无法全部找到你想要的,这时你可以下载一些其它第三方插件来分析其源码。


最重要的一点,那就是反编译JIRA代码,直接查看之。
比如,你想查看 /secure/IssueNavigator.jspa 的代码
打开 WEB-INF/classes/actions.xml 查找 IssueNavigator ,如下:   

<action name="issue.IssueNavigator" alias="IssueNavigator">   
    
<view name="success">/secure/views/navigator/navigator.jsp</view>   
    
<view name="error">/secure/views/navigator/navigator.jsp</view>   
</action>   

表示其对应的类是  com.atlassian.jira.web.action.issue.IssueNavigator 反编译之即可。


以下说一说一些常用的方法:
JIRA提供各种 xxxManager 提口来实现各种操作
你可以通过 ComponentManager.getInstance().getXxx() 来得到其实例
也可以通过 ComponentManager.getComponentInstanceOfType(xxx.class) 来得到,非常方便。

比如:

JiraAuthenticationContext authenticationContext = ComponentManager.getInstance().getJiraAuthenticationContext();    
   
ProjectComponentManager pcm 
= (ProjectComponentManager)ComponentManager.getComponentInstanceOfType(ProjectComponentManager.class);   

例子:

public static User getCurrentUser() {        
    JiraAuthenticationContext authenticationContext 
= ComponentManager.getInstance().getJiraAuthenticationContext();        
    
return authenticationContext == null ? null : authenticationContext.getUser();        
}
        
       
public static Project getProject(long pid) {        
    
return ComponentManager.getInstance().getProjectManager().getProjectObj(pid);        
}
     
   
public static MutableIssue getIssueById(Long id) {    
    
try {    
        IssueManager issueManager 
= ComponentManager.getInstance().getIssueManager();    
        
return issueManager.getIssueObject(id);    
    }
 catch (Exception e) {    
        
return null;    
    }
    
}
    

把邮件加入JIRA队列:


Email mail = new Email(toaddr);    
    
MailQueueItem item 
= new SingleMailQueueItem(mail);    
ManagerFactory.getMailQueue().addItem(item);    

另外你可以覆盖JIRA的Action,比如覆盖CreateSubTaskIssueDetails
让其在创建子任务时自动导入父任务的一些数据(如"所属模块")。


<action name="jira.plugin.rstoolkit.webui.action.CreateSubTaskIssueDetails" alias="CreateSubTaskIssueDetails">   
    
<view name="error">/secure/views/createsubtaskissue-details.jsp</view>   
    
<view name="input">/secure/views/createsubtaskissue-details.jsp</view>   
    
<view name="init">/rstoolkit/initsubtaskdetails.jsp</view>   
</action>   

实在不想打字,其它的一些就不一一列举了。

posted @ 2007-07-12 09:45 一条老狗 阅读(6401) | 评论 (4)编辑 收藏

这是一个用Java Swing写的日语词典,主要是为了在Linux下使用。

Linux下使用: # ./csjpdict.sh
Windows下: csjpdict.exe  (Windows下推荐你使用原版"随想日语")

当然前提是你已经配置好Java运行环境JRE。

特别说明: 日语词库来源于“随想日语晶典2004”,版权归其原作者所有。



下载: csjpdict.part1.rar  csjpdict.part2.rar

posted @ 2007-07-12 09:37 一条老狗 阅读(1283) | 评论 (1)编辑 收藏

IPMsg 是一款局域网内即时通信软件(中文名飞鸽传书)
此版本为从日文版2.0.6修改而来。(VC6编译)


使用RTF格式解决在日文Windows下发送接受中文消息问题。
不过由于使用RTF,所以发送消息给其它版本的IPMsg时(比如Linux下的),对方将无法显示。
此时可以把RTF复选框去掉,不发送RTF格式。

注: 你需要在日文Windows上运行,不然界面是乱码。
(你也可以在中文Windows下用AppLocal切换到日文编码下运行)


 

下载 IPMsgRS-Setup.rar

posted @ 2007-07-12 09:28 一条老狗 阅读(1284) | 评论 (1)编辑 收藏