一條老狗

                     老狗拉破車
          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 一條老狗 閱讀(4037) | 評論 (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 一條老狗 閱讀(2154) | 評論 (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 一條老狗 閱讀(2785) | 評論 (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 一條老狗 閱讀(4102) | 評論 (2)編輯 收藏

          1、桃源話很奇特,尾音很高,比如“局”,便發音成了“豬”。

            先到縣委宣傳部,聯系到人事局采訪。宣傳部的人打電話替我預約,用免提。

            宣傳部:“喂,你人是豬嗎?(人事局)”

            對方:“不是,你搞錯了。我不是人是豬(人事局),我娘是豬(糧食局)。”

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

            第二天參加一個縣政府的匯報會。會前點名。

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

            于是參會者一個個地自報家門:

            “我是公閹豬(公安局)。”

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

            “我有點豬(郵電局)。”

            “我是典型豬(電信局)。”

          2、話說湖南一個口音很重的縣長到村里作報告: 

            “兔子們,蝦米們,豬尾巴!不要醬瓜,咸菜太貴啦!!”
            (翻譯:同志們,鄉民們,注意吧!不要講話,現在開會啦!!) 

            縣長講完后,主持人說:“咸菜請香腸醬瓜!”
            (翻譯:現在請鄉長講話!) 

            鄉長說:“兔子們,今天的飯狗吃了,大家都是大王八!”
            (翻譯:同志們,今天的飯夠吃了,大家都使大碗吧!) 

            “不要醬瓜,我撿個狗屎給你們舔舔。。。”
            (翻譯:不要講話,我講個故事給你們聽聽。。。)

          posted @ 2007-07-27 09:45 一條老狗 閱讀(382) | 評論 (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 一條老狗 閱讀(1488) | 評論 (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 一條老狗 閱讀(6422) | 評論 (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 一條老狗 閱讀(1319) | 評論 (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 一條老狗 閱讀(1301) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 北流市| 汉沽区| 黄石市| 延寿县| 确山县| 古丈县| 高唐县| 新郑市| 兴城市| 彰化市| 平陆县| 东源县| 东乡县| 甘谷县| 南丰县| 当雄县| 滕州市| 隆子县| 河津市| 汉寿县| 韩城市| 凤城市| 青田县| 枣庄市| 清丰县| 南漳县| 海口市| 陇西县| 清涧县| 镇安县| 万宁市| 太康县| 句容市| 繁峙县| 通州区| 米易县| 许昌市| 专栏| 黄石市| 常熟市| 六盘水市|