amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks

          #

          從來沒做過報表,突然要用到,急忙之中想起了Eclipse里面有個報表插件,上eclipse.org查看,知道它叫BIRT。下載,安裝,不能運行,但在about里面看到這個插件已加載。再回官方網站一看,原來還需要EMF,GEF,依次下回來裝上,可以用了。打開幫助里的指南,一步一步做了個表格式的報表,感覺還是比較簡單的。但我的目標是要做圖形報表,并且可以程序控制。研究了兩天,有了初步的了解,做出了一個簡單的柱狀圖,也能接受一些參數了,但程序控制還沒頭緒,也不知道從何處入手,文檔里面只有API,沒有使用說明,也沒有找到相關的書籍。
          記錄下一些東西:
          1、BIRT需要下載iText才能生成PDF報表,而且iText的版本必須跟網站上的要求嚴格一致,例如要求1.3的不能用1.3.1的,因為插件配置文件里寫明是iText-1.3.jar,如果下了1.3.1版本的,也必須把文件名改成1.3才行。同時還需要iTextAsian.jar。
          2、BIRT支持Web查看。其實在Eclipse里面預覽就是通過本地web服務器查看的。可以把報表發布到tomcat里。
          3、BIRT支持參數化報表,可以根據用戶的輸入生成相應的報表,但并不是什么地方都可以用參數,還是要編程才能保證靈活性。例如SQL查詢里不支持表名作為參數(其實是數據庫本身不支持)。圖里的標題也不能用參數。
          4、圖形里的日期格式化不夠靈活,還需要編程的支持。

          還要研究一下怎樣通過程序控制報表的生成。

          本文為個人備忘錄。
          posted @ 2007-01-09 20:55 amp@java 閱讀(449) | 評論 (0)編輯 收藏

          龍芯,這個從02年就爆出來的東西,至今沒有在市場上見到真正的可用產品,然而,龍芯的設計者們卻已經給它做好了長遠的計劃,“多核”、“納米”這些最新最火的名詞一個個往龍芯身上堆。這不,胡偉武大老板說,2008年的龍芯3號有8-16核,2010年32-64核,以后就跟水果差不多了,滿肚子核;還要用到45納米技術呢,現在治療性病的藥都用到納米技術啦,龍芯這么高科技的東西肯定不會落后的。真是強啊,我現在才知道中國的CPU原來是領先世界的啊,只不過這個CPU是個神物,一般人看不到而已,只有吹牛達到一定級別,想象力超過某個水平才能見到這個強大無比的CPU。可以預見,在不久的將來,龍芯將會成為世界上運算最快的通用CPU,Intel、AMD之流將死無葬身之地!!!

          當前我們正在建設和諧社會,“和諧”已成為各行各業的目標,CPU也不例外,我們的龍芯3號CPU的“一個目標是要建設和諧的計算和諧,一是指人機和諧,串行程序并行化的問題;另一個是指機機和諧,就是兼容問題。”嗯,的確,多核了,納米了,還不夠,一定要和諧!

          頂你個肺!

          http://news.csdn.net/n/20061114/97490.html



          posted @ 2006-11-19 16:00 amp@java 閱讀(3279) | 評論 (27)編輯 收藏

          使用WTP中的run on server來調試web程序時,按照默認的配置,會把該程序放在根目錄,即context為"/",啟動的時候會加載兩次,如果有ServletContextListener的話,里面的東西就會運行兩次;如果修改配置,通過Project->Property->Web Project Settings,把Context Root改為web project名的話,運行的時候就不會把ServletContextListener加載兩次,不過除了正常加載指定的web程序外,還會試圖加載一個不存在的context,導致拋出ClassNotFoundException異常,不過不影響使用,后來發現這是WTP的bug,不過描述的好像跟我遇到的情形不太一樣。
          http://dev.eclipse.org/newslists/news.eclipse.webtools/msg09647.html
          https://bugs.eclipse.org/bugs/show_bug.cgi?id=125364

          posted @ 2006-11-07 19:02 amp@java 閱讀(467) | 評論 (0)編輯 收藏

          使用HTML元素的style.left,style.top,style.width,style.height以及width,height屬性,都不能獲得元素的真正位置與大小,這些屬性取出來的都是原來的設置值,例如<table? id="table1" width="500">,那么通過document.getElementById("table1").width取出來的值永遠都是500,而不管這個表格是否已經被撐大了;同時,通過document.getElementById("table1").style.left獲得的值是空的,因為沒有設置這個值。
          要取得HTML元素的真正位置與大小,只能通過offsetLeft,offsetTop,clientWidth,clientHeight,offsetWidth,offsetHeight屬性,其中offsetLeft與offsetTop分別是當前元素在父元素內的相對左坐標與相對頂坐標,要取得絕對坐標,還需要用到offsetParent屬性,改屬性取得當前元素的父元素。要取得絕對坐標,就必須依次獲得父元素的相對坐標,直到父元素為空,然后把所有相對坐標加起來,得到當前元素的絕對坐標。
          最常見的是日期選擇框,當點擊按鈕時彈出日期選擇框總是在按鈕的旁邊,這個選擇框的坐標,就是根據按鈕的坐標以及按鈕的offsetWidth,offsetHeight來取得的。

          posted @ 2006-11-07 18:50 amp@java 閱讀(2478) | 評論 (0)編輯 收藏

          要把一個長表格打印出來,要做到正確分頁,直接用HTML生成表格是不能滿足要求的:
          1、如果把整個表格放在一頁,在打印時再自動分頁,則有可能在某一表格行中間分頁,而且只能有一個表格頭,不能每頁一個,因為你不知道會在哪里分頁;
          2、如果按照固定的行數分頁,由于每行的高度不一樣,就會造成有的頁不能填滿,有的卻太滿自動分頁了。

          原來考慮過一種方法:
          利用Javascript動態生成表格,每次往表格的最后插入一行,然后檢查表格高度,如果高度超過了一頁的最大高度,則把這一行刪除,新建一個表格,把這一行插入到新的表格里面,如此循環,直到全部行插入完畢。但是,利用table的height屬性、style.height屬性都得不到表格的實際高度(只有設置了height屬性、style的height屬性才能取得這兩個值,但只是設置值,并不是實際值),于是就只能放棄了。

          后來仔細查看了table的dom屬性,才知道它還有clientHeight,offsetHeight等屬性,這兩個才是表格的真正高度,它們之間的區別可看這里:
          http://developer.mozilla.org/cn/docs/DOM:element.clientHeight
          http://developer.mozilla.org/en/docs/DOM:element.offsetHeight
          更直觀的可以看這里:
          http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/measuring.asp


          簡單地說,clientHeight就是不包含border的高度,offsetHeight就是連border的高度。對于要打印的表格,border一般只有2px,所以用clientHeight和offsetHeight區別不大。

          構建這個頁面需要用到的:

          table的insertRow(),deleteRow()方法,用來給表格增加、刪除一行(tr);
          tr的insertCell()方法,用來給一行加入一格(td);
          td的innerText屬性,用來給一格加入內容。

          CSS分頁要用到page-break-before:always(或page-break-after:aways)的樣式,遇到使用了該樣式的標簽,就會在標簽前面(或后面)強制分頁,于是可以在兩個表格之間加一個這樣的分頁。
          為了顯示而不打印,還要用到<style>標簽的media屬性,當設置
          <style media="print">
          .noprint {display:none}
          </style>
          時,用了noprint作為class的標簽就只會顯示而不打印出來。

          對于IE,還可以使用WebBrowser控件,彈出“頁面設置”窗口、“打印預覽”窗口、直接打印等功能。對于其他瀏覽器,則只能調用window.print()函數了。

          JSF生成的中文都是用&#unicode;來表示的,其中unicode是中文字符的UNICODE編碼,通過innerText生成表格內容時,必須把這些東西轉換成真正的中文,否則會直接把這些符號插入到表格中,慘不忍睹。javascript里有個String.fromCharCode()函數可以把Unicode編碼轉換成字符。另外,通過innerHTML加入內容也可把這些編碼正常顯示出來,但需要escape XML,以免把內容當作HTML標簽渲染。


          posted @ 2006-11-07 10:11 amp@java 閱讀(9609) | 評論 (8)編輯 收藏

          機器配置:
          P4 2.8 GHz 超線程,內存 1G

          癥狀:
          使用Eclipse時,點擊某個按鈕或圖標甚至正在輸入代碼時,整個程序突然失去響應,菜單欄變白,除了關閉按鈕,其他地方都沒反應,在任務管理器中發現javaw.exe占用CPU50%(相當于單CPU100%),內存占用200多M,且CPU和內存占用數值均停止不動,機器風扇開始轟鳴,再等半天還是這個樣子。點擊“關閉”按鈕出現“立即結束”對話框,只能很無奈地強行退出,有時一天碰到10多次,基本失去可用性。

          尋找解決方案:
          百度、google搜索,一般的解決方案是,調整啟動參數-Xms -Xmx,增大堆內存,然而,在上述機器上設置為-Xms512m -Xmx512m,仍然沒效,到失去響應的時候占用的內存依然是200多M。
          看來這個問題需要自己解決了。用命令行方式啟動eclipse:
          java -Xms512m -Xmx512m -jar startup.jar
          到失去響應的時候,發現命令行里打印出java.lang.OutOfMemoryError: PermGen space,打開workspace/.metadata/.log文件,發現很多這樣的字符串,把這段話貼到搜索引擎上,發現很多這種問題,不過一般出現在Tomcat,Weblogic等Web應用程序上,沒有人報告過會出現在Eclipse上。解決方案是增加啟動參數:
          -XX:MaxNewSize=256m -XX:MaxPermSize=256m
          于是在eclipse.ini里把啟動參數改為:

          -Xms512m?-Xmx512m?-XX:MaxNewSize=256m?-XX:MaxPermSize=256m

          啟動Eclipse,用了幾天,都沒再出現失去響應的癥狀。

          關于MaxPermSize的文章:
          CFMX JVM Tuning - The difference between MaxPermSize and Heap Size
          posted @ 2006-11-02 11:02 amp@java 閱讀(12960) | 評論 (2)編輯 收藏

          很遺憾,剛才寫了很多,一按“代碼”按鈕,沒有彈出對話框,但整個瀏覽器已經不能動,再按一下Alt+F4,整個瀏覽器關閉,什么都沒有了,哭……我用的是TheWorld1.33+IE7。

          剛才的大意是:
          利用socket發送字符串時,為了區分字符串的起始、結束與中間各個部分的間隔,需要一些特殊字符作為分隔符,但普通可打印字符有可能出現在要發送的字符串中,不能作為分隔符,所以只能使用不可打印字符。Java使用的是Unicode編碼,可通過\uxxxx來表示編碼為xxxx的字符。例如:\u0129,\u0130,\u0131都是不可打印字符。但是,通過socket發送和接收字符串時,需要指定編碼,否則會使用操作系統的默認編碼。在發送端,通過OutputStream的write()函數寫出要發送的字符串的Bytes,這些bytes要通過String.getBytes(編碼名稱)來獲得,例如編碼名稱為: UTF-16BE,則:

          1?socket.getOutputStream.write(str.getBytes("UTF-16BE"));

          讀socket的時候,通過InputStreamReader的read()函數來一個個字符地讀取,這時候如果不指定編碼,使用的也是操作系統的默認編碼,例如中文的GB18030,這時候有些Unicode字符沒有對應的GB18030編碼,讀出來的就都是?號。所以必須在InputStreamReader的構造函數中指定字符編碼,例如:

          1?InputStreamReader?isr?=?new?InputStreamReader(socket.getInputStream(),"UTF-16BE");
          2?char?c?=??(char)isr.read();
          posted @ 2006-11-02 10:39 amp@java 閱讀(1594) | 評論 (0)編輯 收藏

          改了一下實現,采用“生產者-消費者”模式。每個串口一個線程,讀取BlockingQueue里的待發信息,作為消費者,發送完畢后把發送結果寫到另外一個BlockingQueue里;查詢線程定時查詢數據庫,獲得待發信息并加入到BlockingQueue里;結果更新線程讀取BlockingQueue里的短信發送結果,更新到數據庫里,并把結果發送到客戶端。
          這樣會帶來一個問題,發送線程發送短信需要一定的時間,可能某條待發信息已經在隊列里了,但查詢線程并不知道,繼續把該信息入列,所以發送線程在發送某條短信前要檢查數據庫,看是否已經發送過,如果發送過,則不再發送。
          posted @ 2006-10-25 17:34 amp@java 閱讀(785) | 評論 (0)編輯 收藏

          做好核心部分,只完成了一半,剩下的圖形界面設計還需要一個漫長的過程。
          SWT做圖形界面是個繁瑣的過程,雖然可以用VE、SWT Designer幫助布局,設置一些屬性,添加一些事件,但里面的邏輯卻是要自己先想好。
          以“設置”頁面為例,為了設置各模塊的參數,需要考慮很多問題:
          1、哪些是立即生效,哪些是重啟才能生效?
          2、什么時候哪個widget需要被Disable,什么時候需要被Enable?
          3、怎么驗證用戶輸入的東西是符合邏輯的?
          ……
          還需要把圖形界面、確定前的臨時配置類、內存中的配置類、硬盤上的配置文件結合起來,什么時候給哪個賦值,什么時候從哪個獲得值都要考慮清楚,同時,在程序運行過程中還需要不斷讀取內存中的配置類,獲得運行時參數,必須保證線程之間不發生沖突。

          posted @ 2006-10-21 14:42 amp@java 閱讀(697) | 評論 (0)編輯 收藏

          瀏覽器緩存對jsp,servlet來說都有時候是很致命的。以前用AJAX實現一個進度條,每隔1秒向服務器詢問一次進度,服務器返回當前的百分比,就一個數字。開始的時候沒有禁止緩存,結果進度條老是不動。我在自己的電腦上測試還沒發現這個問題,因為我在internet選項了選擇了“每次訪問此頁時檢查”,而默認選項是“自動”,其實就是允許緩存。禁止緩存可以在HTML中寫,也可以在http header里面寫,但對于非HTML頁面,就只有后面那種選擇了,在servlet里可以這樣寫:

          response.setHeader("Pragma","No-Cache");
          response.setHeader(
          "Cache-Control","No-Cache");
          response.setDateHeader(
          "Expires",0);

          ?必須三個都寫上才能應付各種瀏覽器。似乎大小寫敏感(不確定,但上面這種肯定適用于IE 5,6)。還有Expires那個值有人說是-1。
          posted @ 2006-10-16 21:32 amp@java 閱讀(1165) | 評論 (2)編輯 收藏

          僅列出標題
          共10頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 
          主站蜘蛛池模板: 长岛县| 沿河| 文成县| 桐柏县| 从化市| 汨罗市| 南江县| 乌拉特前旗| 洮南市| 航空| 石台县| 巴楚县| 页游| 襄垣县| 漳平市| 定安县| 云安县| 十堰市| 曲松县| 高阳县| 北票市| 富川| 手游| 祁东县| 灌南县| 杂多县| 顺义区| 新丰县| 龙泉市| 封丘县| 玉田县| 普兰县| 洮南市| 大新县| 霍州市| 大埔县| 沙田区| 灵璧县| 阳东县| 沙坪坝区| 抚宁县|