ice world

          There is nothing too difficult if you put your heart into it.
          posts - 104, comments - 103, trackbacks - 0, articles - 0

          之前開發(fā)的環(huán)境為:
          JDK5/TOMCAT5.5
          現(xiàn)在的開發(fā)環(huán)境為:
          JDK6/TOMCAT5.5

          登陸地圖界面地圖無法加載,IE左下角黃色警告,點開顯示“dojo未定義”,GG,BD了一晚上,真是眾說紛紜,各有各的情況,直到見到了JDK版本這一說我恍然大悟,我的環(huán)境確實變了,迅速裝上了JDK5,登陸地圖,OK。。。

          posted @ 2012-05-16 23:07 IceWee 閱讀(2684) | 評論 (0)編輯 收藏

          className.class.getResourceAsStream

           
          一: 要加載的文件和.class文件在同一目錄下,例如:com.x.y 下有類Test.class ,同時有資源文件config.properties

          那么,應該有如下代碼:

          //前面沒有“/”代表當前類的目錄

          InputStream is1 = Test.class.getResourceAsStream("config.properties");
          System.out.println(is1);// 不為null

           

          第二:在Test.class目錄的子目錄下,例如:com.x.y 下有類Test.class ,同時在 com.x.y.prop目錄下有資源文件config.properties

          那么,應該有如下代碼:

          //前面沒有“/”代表當前類的目錄

          InputStream is2 = Test.class.getResourceAsStream("prop/config.properties");
          System.out.println(is2);//不為null

           

          第三:不在同目錄下,也不在子目錄下,例如:com.x.y 下有類Test.class ,同時在 com.m.n 目錄下有資源文件config.properties

          那么,應該有如下代碼:

          //前面有“/”,代表了工程的根目錄

          InputStream is3 = Test.class.getResourceAsStream("/com/m/n/config.properties");

          System.out.println(is3);//不為null

          ClassLoader.getSystemResourceAsStream

          className.class.getResourceAsStream 的第三種取得的路徑一樣,但少了“/”

           

          InputStream is4 = ClassLoader.getSystemResourceAsStream("properties/PayManagment_Config.properties");
          System.out.println(is4);//不為null

          posted @ 2012-05-04 13:31 IceWee 閱讀(9162) | 評論 (0)編輯 收藏

          這種寫法一般都會在基類中看到,而且是使用了JAVA泛型的,比如我們J2EE中的BaseDAO什么的,請看代碼,其實簡寫了,分開寫就明了了。


          基類:
          import java.lang.reflect.ParameterizedType;
          import java.lang.reflect.Type;

          public abstract class SuperClass<T> {

              
          private Class<T> beanClass;

              @SuppressWarnings(
          "unchecked")
              
          public SuperClass() {
                  
          super();
                  ParameterizedType parameterizedType 
          =  (ParameterizedType) getClass().getGenericSuperclass();
                  Type[] types 
          = parameterizedType.getActualTypeArguments();
                  beanClass 
          = (Class<T>) types[0];
              }


              
          public Class<T> getBeanClass() {
                  
          return beanClass;
              }


              
          public void setBeanClass(Class<T> beanClass) {
                  
          this.beanClass = beanClass;
              }

              
              
          public static void main(String[] args) {
                  SuperClass
          <Cat> superClass = new SubClass();
                  System.out.println(superClass.getBeanClass());
              }

              
          }


          子類:
          public class SubClass extends SuperClass<Cat> {
             
             
          public SubClass() {
                 
          super();
              }

             
          }


          class Cat {

             
          public Cat() {
                 
          super();
              }

          }


          運行SuperClass后控制臺會打印:
          class com.stos.test.generic.Cat

          看到運行結果你可能就清楚了,就是獲取實際的泛型類。








          posted @ 2012-04-27 09:13 IceWee 閱讀(7590) | 評論 (2)編輯 收藏

          原文地址:

          http://code.google.com/p/swfobject/wiki/documentation



          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
          <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
          <head> 
          <title>SWFObject - step 1</title> 
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
          </head> 
          <body> 
          <div> 

          <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420"> 
          <param name="movie" value="myContent.swf" /> 
          <!--[if !IE]>--> 
          <object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420"> 
          <!--<![endif]--> 
          <p>Alternative content</p> 
          <!--[if !IE]>--> 
          </object> 
          <!--<![endif]--> 
          </object> 

          </div> 
          </body> 
          </html>


          posted @ 2011-11-04 14:16 IceWee 閱讀(9080) | 評論 (0)編輯 收藏

          在安裝有些軟件的時候,會向注冊表中寫入大量信息,但長度卻超出了注冊表的默認限值,此時就會報改錯,如圖:



          錯誤信息和實際原因簡直風馬牛不相及,你可能會困惑許久。解決方法:

          開始-運行,輸入:regedit,確定后打開注冊表編輯器

          修改注冊表:

          HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

          Key: RegistrySizeLimit

          Type: REG_DWORD

          Value: ffffffff (4294967295)

           

          如果在注冊表中沒有找到RegistrySizeLimit 鍵,可以通過在“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control”右面窗口中新建RegistrySizeLimit的DWORD鍵值,并設該值為ffffffff




          posted @ 2011-10-12 15:27 IceWee 閱讀(17454) | 評論 (3)編輯 收藏

          實際開發(fā)中很可能有刪除指定下標元素的需求,這次我就遇到了,為了簡單起見,我把數(shù)字下標加1了,也就是說要刪除第一個元素需要傳入?yún)?shù)1而不是0,下面為代碼,如果不喜歡可以修改代碼!
          /**
           
          * 刪除指定下標的數(shù)組元素
           
          */
          Array.prototype.remove = function(index){
              
          if (isNaN(index) || index < 1 || index > this.length) {
                  return;
              }
              
          for(var i = 0; i < this.length; i++){
                  
          if (i == index - 1) {
                      
          for(var j = i; j < this.length; j++){
                          this[j] 
          = this[j+1];
                      }
                      this.length 
          = this.length - 1;
                      break;
                  }
                      
              }
          }




          posted @ 2011-09-10 07:46 IceWee 閱讀(1786) | 評論 (0)編輯 收藏

          原文出自【雪的痕跡】
          原文地址:http://www.java3z.com/cwbwebhome/article/article8/852.html

          java做的系統(tǒng)給人的印象是什么?占內存!說道這句話就會有N多人站出來為java辯護,并舉出一堆的性能測試報告來證明這一點。其實從理論上來講java做的系統(tǒng)并不比其他語言開發(fā)出來的系統(tǒng)更占用內存,那么為什么卻有這么N多理由來證明它確實占內存呢?兩個字,陋習。

          (1)別用new Boolean()
          在很多場景中Boolean類型是必須的,比如JDBC中boolean類型的set與get都是通過Boolean封裝傳遞的,大部分ORM也是用Boolean來封裝boolean類型的,比如:

          ps.setBoolean("isClosed",new Boolean(true));
          ps.setBoolean("isClosed",new Boolean(isClosed));
          ps.setBoolean("isClosed",new Boolean(i==3));

          通常這些系統(tǒng)中構造的Boolean實例的個數(shù)是相當多的,所以系統(tǒng)中充滿了大量Boolean實例小對象,這是相當消耗內存的。Boolean類實際上只要兩個實例就夠了,一個true的實例,一個false的實例。

          Boolean類提供兩了個靜態(tài)變量:
          public static final Boolean TRUE = new Boolean(true);
          public static final Boolean FALSE = new Boolean(false);

          需要的時候只要取這兩個變量就可以了,
          比如:
          ps.setBoolean("isClosed",Boolean.TRUE);
          那么象2、3句那樣要根據(jù)一個boolean變量來創(chuàng)建一個Boolean怎么辦呢?可以使用Boolean提供的靜態(tài)方法:
          Boolean.valueOf()

          比如:
          ps.setBoolean("isClosed",Boolean.valueOf(isClosed));
          ps.setBoolean("isClosed",Boolean.valueOf(i==3));

          因為valueOf的內部實現(xiàn)是:return (b ? TRUE : FALSE);
          所以可以節(jié)省大量內存。相信如果Java規(guī)范直接把Boolean的構造函數(shù)規(guī)定成private,就再也不會出現(xiàn)這種情況了。

          (2)別用new Integer
          和Boolean類似,java開發(fā)中使用Integer封裝int的場合也非常多,并且通常用int表示的數(shù)值通常都非常小。SUN
          SDK中對Integer的實例化進行了優(yōu)化,Integer類緩存了-128到127這256個狀態(tài)的Integer,如果使用Integer.valueOf(int
          i),傳入的int范圍正好在此內,就返回靜態(tài)實例。這樣如果我們使用Integer.valueOf代替new
          Integer的話也將大大降低內存的占用。如果您的系統(tǒng)要在不同的SDK(比如IBM
          SDK)中使用的話,那么可以自己做了工具類封裝一下,比如IntegerUtils.valueOf(),這樣就可以在任何SDK中都可以使用這種特性。

          (3)用StringBuffer代替字符串相加
          這個我就不多講了,因為已經被人講過N次了。我只想將一個不是笑話的笑話,我在看國內某“著名”java開發(fā)的WEB系統(tǒng)的源碼中,竟然發(fā)現(xiàn)其中大量的使用字符串相加,一個拼裝SQL語句的方法中竟然最多構造了將近100個string實例。無語中!

          (4)過濫使用哈希表
          有一定開發(fā)經驗的開發(fā)人員經常會使用hash表(hash表在JDK中的一個實現(xiàn)就是HashMap)來緩存一些數(shù)據(jù),從而提高系統(tǒng)的運行速度。比如使用HashMap緩存一些物料信息、人員信息等基礎資料,這在提高系統(tǒng)速度的同時也加大了系統(tǒng)的內存占用,特別是當緩存的資料比較多的時候。其實我們可以使用操作系統(tǒng)中的緩存的概念來解決這個問題,也就是給被緩存的分配一個一定大小的緩存容器,按照一定的算法淘汰不需要繼續(xù)緩存的對象,這樣一方面會因為進行了對象緩存而提高了系統(tǒng)的運行效率,同時由于緩存容器不是無限制擴大,從而也減少了系統(tǒng)的內存占用。現(xiàn)在有很多開源的緩存實現(xiàn)項目,比如ehcache、oscache等,這些項目都實現(xiàn)了FIFO、MRU等常見的緩存算法。

          (5)避免過深的類層次結構和過深的方法調用
          因為這兩者都是非常占用內存的(特別是方法調用更是堆??臻g的消耗大戶)。

          (6)變量只有在用到它的時候才定義和實例化。

          (7)盡量避免使用static變量
          類內私有常量可以用final來代替。

          java內存管理的思想(主要來源于thinking in java)

          Java內存管理特點
          Java一個最大的優(yōu)點就是取消了指針,由垃圾收集器來自動管理內存的回收。程序員不需要通過調用函數(shù)來釋放內存。


          1、Java的內存管理就是對象的分配和釋放問題。

          在Java中,程序員需要通過關鍵字new為每個對象申請內存空間
          (基本類型除外),所有的對象都在堆
          (Heap)中分配空間。
          對象的釋放是由GC決定和執(zhí)行的。
          在Java中,內存的分配是由程序完成的,而內存的釋放是由GC完成的,這種收支兩條線的方法簡化了程序員的工作。但也加重了JVM的工作。這也是Java程序運行速度較慢的原因之一。

          GC釋放空間方法:
          監(jiān)控每一個對象的運行狀態(tài),包括對象的申請、引用、被引用、賦值等。當該對象不再被引用時,釋放對象。


          2、內存管理結構
          Java使用有向圖的方式進行內存管理,對于程序的每一個時刻,我們都有一個有向圖表示JVM的內存分配情況。

          將對象考慮為有向圖的頂點,將引用關系考慮為圖的有向邊,有向邊從引用者指向被引對象。另外,每個線程對象可以作為一個圖的起始頂點,例如大多程序從main進程開始執(zhí)行,那么該圖就是以main進程頂點開始的一棵根樹。在這個有向圖中,根頂點可達的對象都是有效對象,GC將不回收這些對象。如果某個對象
          (連通子圖)與這個根頂點不可達(注意,該圖為有向圖),那么我們認為這個(這些)對象不再被引用,可以被GC回收。

          3、使用有向圖方式管理內存的優(yōu)缺點
          Java使用有向圖的方式進行內存管理,可以消除引用循環(huán)的問題,例如有三個對象,相互引用,只要它們和根進程不可達的,那么GC也是可以回收它們的。
          這種方式的優(yōu)點是管理內存的精度很高,但是效率較低。


          ++:
          另外一種常用的內存管理技術是使用計數(shù)器,例如COM模型采用計數(shù)器方式管理構件,它與有向圖相比,精度行低(很難處理循環(huán)引用的問題),但執(zhí)行效率很高。


          ★ Java的內存泄露
          Java雖然由GC來回收內存,但也是存在泄露問題的,只是比C++小一點。


          1、與C++的比較

          c++所有對象的分配和回收都需要由用戶來管理。即需要管理點,也需要管理邊。若存在不可達的點,無法回收分配給那個點的內存,導致內存泄露。存在無用的對象引用,自然也會導致內存泄露。
          Java由GC來管理內存回收,GC將回收不可達的對象占用的內存空間。所以,Java需要考慮的內存泄露問題主要是那些被引用但無用的對象——即指要管理邊就可以。被引用但無用的對象,程序引用了該對象,但后續(xù)不會再使用它。它占用的內存空間就浪費了。
          如果存在對象的引用,這個對象就被定義為“活動的”,同時不會被釋放。


          2、Java內存泄露處理

          處理Java的內存泄露問題:確認該對象不再會被使用。
          典型的做法——
          把對象數(shù)據(jù)成員設為null
          從集合中移除該對象
          注意,當局部變量不需要時,不需明顯的設為null,因為一個方法執(zhí)行完畢時,這些引用會自動被清理。


          例子:

          List myList=new ArrayList();
          for (int i=1;i<100; i++) {
              Object o=new
              Object();
              myList.add(o);
              o=null;
          }
          //此時,所有的Object對象都沒有被釋放,因為變量myList引用這些對象。

          當myList后來不再用到,將之設為null,釋放所有它引用的對象。之后GC便會回收這些對象占用的內存。


          ★ 對GC操作
          對GC的操作并不一定能達到管理內存的效果。

          GC對于程序員來說基本是透明的,不可見的。我們只有幾個函數(shù)可以訪問GC,例如運行GC的函數(shù)System.gc(),System.。
          但是根據(jù)Java語言規(guī)范定義,
          System.gc()函數(shù)不保證JVM的垃圾收集器一定會執(zhí)行。因為,不同的JVM實現(xiàn)者可能使用不同的算法管理GC。通常,GC的線程的優(yōu)先級別較低。

          JVM調用GC的策略有很多種,有的是內存使用到達一定程度時,GC才開始工作,也有定時執(zhí)行的,有的是平緩執(zhí)行GC,有的是中斷式執(zhí)行GC。但通常來說,我們不需要關心這些。除非在一些特定的場合,GC的執(zhí)行影響應用程序的性能,例如對于基于Web的實時系統(tǒng),如網(wǎng)絡游戲等,用戶不希望GC突然中斷應用程序執(zhí)行而進行垃圾回收,那么我們需要調整GC的參數(shù),讓GC能夠通過平緩的方式釋放內存,例如將垃圾回收分解為一系列的小步驟執(zhí)行,Sun提供的HotSpot
          JVM就支持這一特性。


          ★ 內存泄露檢測
          市場上已有幾種專業(yè)檢查Java內存泄漏的工具,它們的基本工作原理大同小異,都是通過監(jiān)測Java程序運行時,所有對象的申請、釋放等動作,將內存管理的所有信息進行統(tǒng)計、分析、可視化。開發(fā)人員將根據(jù)這些信息判斷程序是否有內存泄漏問題。這些工具包括Optimizeit
          Profiler,JProbe Profiler,JinSight , Rational 公司的Purify等。

          在運行過程中,我們可以隨時觀察內存的使用情況,通過這種方式,我們可以很快找到那些長期不被釋放,并且不再使用的對象。我們通過檢查這些對象的生存周期,確認其是否為內存泄露。


          ★ 軟引用
          特點:只有當內存不夠的時候才回收這類內存,同時又保證在Java拋出OutOfMemory異常之前,被設置為null。
          保證最大限度的使用內存而不引起OutOfMemory異常。
          在某些時候對軟引用的使用會降低應用的運行效率與性能,例如:應用軟引用的對象的初始化過程較為耗時,或者對象的狀態(tài)在程序的運行過程中發(fā)生了變化,都會給重新創(chuàng)建對象與初始化對象帶來不同程度的麻煩。


          用途:

          可以用于實現(xiàn)一些常用資源的緩存,實現(xiàn)Cache的功能
          處理一些占用內存大而且聲明周期較長,但使用并不頻繁的對象時應盡量應用該技術


          ★ java程序設計中有關內存管理的經驗

          1.最基本的建議是盡早釋放無用對象的引用。如:...
          A a = new A();
          //應用a對象
          a = null; //當使用對象a之后主動將其設置為空
          ….
          注:如果a 是方法的返回值,不要做這樣的處理,否則你從該方法中得到的返回值永遠為空,而且這種錯誤不易被發(fā)現(xiàn)、排除

          2.盡量少用finalize函數(shù)。它會加大GC的工作量。
          3.如果需要使用經常用到的圖片,可以使用soft應用類型。它盡可能把圖片保存在內存中
          4.注意集合數(shù)據(jù)類型,包括數(shù)組、樹、圖、鏈表等數(shù)據(jù)結構,這些數(shù)據(jù)結構對GC來說,回收更為復雜。
          5.盡量避免在類的默認構造器中創(chuàng)建、初始化大量的對象,防止在調用其自類的構造器時造成不必要的內存資源浪費
          6.盡量避免強制系統(tǒng)做垃圾內8.盡量做遠程方法調用類應用開發(fā)時使用瞬間值變量,除非遠程調用端需要獲取該瞬間值變量的值。
          9.盡量在合適的場景下使用對象池技術以提高系統(tǒng)性能。存的回收,增長系統(tǒng)做垃圾回收的最終時間
          7.盡量避免顯式申請數(shù)組空間

          posted @ 2011-08-24 10:25 IceWee 閱讀(4604) | 評論 (0)編輯 收藏

          上個禮拜卸了ArcIMS裝上了ArcGIS Server9.3,感覺使用起來比ArcIMS簡單了,安裝也比較簡單,除了選擇下安裝目錄外一直是下一步。

          ESRI公司不是想把一切都WEB化嘛!就是桌面能做的WEB也可以!所以安裝后有個定向到ArcGIS Server Manager的網(wǎng)頁鏈接,點擊后即可發(fā)布地圖服務。

          但是我安裝后怎么都進不去,當然要注意的一點是你用什么帳號登陸?默認的管理員帳號是arcgismanager,密碼是你在安裝Post Install的時候指定的,沒錯,就是它,可死活就是進不去呢?先擱下。有人喜歡用管理員帳號登陸,那么沒問題,你只需要將當前登陸的管理員或其他用戶添加到agsadmin和agsusers兩個用戶組中即可。當你登陸到Windows操作系統(tǒng)的時候發(fā)現(xiàn)增加了這三個用戶,看起來很不爽,你根本不會用他們登陸操作系統(tǒng),那么這里有個隱藏賬戶的注冊表文件,你可以復制下來保存成“任意名稱.reg”,雙擊運行即可

          系統(tǒng)登陸界面中隱藏某賬戶

          Windows Registry Editor Version 5.00
           
          [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList] "arcgismanager"=dword:00000000

          [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList] "ArcGISSOC"=dword:00000000

          [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList] "ArcGISSOM"=dword:00000000

           

          言歸正傳,為啥我用arcgismanager/密碼 登陸不進去了呢?密碼我明明記得,或者我用系統(tǒng)管理員(前提是已經將管理員加入了那兩個用戶組中)登陸也不行?我左思右想,終于想到了,之前查過資料,網(wǎng)上有人說需要關閉防火墻,我突然想起該事來!怎么早沒想起?!害得我卸載重裝了一遍還是不行!沒文化真可怕,記憶力差咱就多博客吧!大腦不行,咱用文字記錄!

          posted @ 2011-06-27 15:11 IceWee 閱讀(2430) | 評論 (0)編輯 收藏

               摘要: 前言:

          我們都知道Java可以將二進制程序打包成可執(zhí)行jar文件,雙擊這個jar和雙擊exe效果是一樣一樣的,但感覺還是不同。其實將java程序打包成exe也需要這個可執(zhí)行jar文件。
            閱讀全文

          posted @ 2011-06-05 16:27 IceWee 閱讀(399) | 評論 (0)編輯 收藏

          FlexBuilder3.0(FB3)插件的安裝要求系統(tǒng)中已經存在eclipse,就像當初的MyEclipse一樣(MyEclipse5.5-),現(xiàn)在MyEclipse強大了,直接All In One了,把eclipse吃到肚子里了,所以再不用咱們選eclipse目錄了,后話。。。eclipse版本要求3.2、3.3或3.4,所以為了能夠順利安裝FlexBuilder3.0(FB3),事先要做的是解壓一個eclipse(3.2、3.3或3.4)到任意目錄,完成FlexBuilder3.0(FB3)的安裝

          如FlexBuilder3.0(FB3)安裝在了如下目錄:

          E:\Program Files\Adobe\Flex Builder 3 Plug-in

          到該目錄下將eclipse目錄拷貝到MyEclipse的dropins目錄下,我的目錄結構:D:\Program Files\MyEclipse\MyEclipse 9\dropins,之后將eclipse重命名,如FlexBuilder3,啟動MyEclipse就有FlexBuilder3的支持了

          MyEclipse好像從7開始裝插件的方式就變了,多了個dropins目錄,你可以隨意將下載下來的eclipse插件放到該目錄下,移除也簡單

          網(wǎng)上的通過代碼將插件的.jar文件都追加到bundles.info文件中,我覺得不夠清晰,個人感覺將插件拷貝到dropins目錄下的方式較低碳環(huán)保

          posted @ 2011-05-21 14:10 IceWee 閱讀(2085) | 評論 (1)編輯 收藏

          僅列出標題
          共11頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 新巴尔虎右旗| 香格里拉县| 高陵县| 宿松县| 郁南县| 扎鲁特旗| 瑞昌市| 新平| 烟台市| 宁陵县| 钟祥市| 富顺县| 临湘市| 兰州市| 敦煌市| 莎车县| 中山市| 乾安县| 威信县| 乌兰浩特市| 彩票| 平山县| 赫章县| 轮台县| 友谊县| 桃源县| 奇台县| 宁武县| 北安市| 利川市| 清镇市| 重庆市| 黄大仙区| 文安县| 濉溪县| 潜山县| 江源县| 玉屏| 尖扎县| 邛崃市| 固始县|