<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2006年12月10日

    在ubuntu下安裝java環境: 1、jdk安裝: (1)下載jdk:java_ee_sdk-5_01-linux.bin 下載地址 http://java.sun.com/javase/downloads/index_jdk5.jsp (2)啟動ubuntu操作系統 (3)用winscp把java_ee_sdk-5_01-linux.bin拷貝到 ubuntu 的/home/wonderful(wonderful是我的用戶目錄) (4)打開Ubuntu終端,運行命令,切換到超級用戶。 (5)cd命令 切換到/home/wonderful 目錄下 (6)運行 cp java_ee_sdk-5_01-linux.bin /usr/local ,將jdk復制到/usr/local目錄下。 (7)cd命令 切換到/usr/local目錄下 (8)運行 chmod a+x java_ee_sdk-5_01-linux.bin 給予相應的權限 (9)./java_ee_sdk-5_01-linux.bin,程序運行(程序默認裝在opt/SDK/jdk下) (10)如果報錯:error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory。 解決方法:在/usr/lib下面發現有 /usr/lib/libstdc++.so.6.0.3于是運行 ln -s /usr/lib/libstdc++.so.6.0.3 /usr/lib/libstdc++.so.5 創建一個符合連接,這個錯誤信息沒有了。 (11)設置Linux的全局環境變量(需要root權限),修改/etc/profile,root超級用戶下 具體命令: su root(輸入密碼后,具有超級用戶權限) vi /etc/profile(編輯profile環境變量文件) 加入: JAVA_HOME=/opt/SDK/jdk PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export PATH JAVA_HOME CLASSPATH 在insert不能修改的情況下:按“shift+:”進入命令輸入格式,輸入命令w(保存) ctrl+z回到命令窗口 (12)運行source /etc/profile,激活java (13)java -version查看java版本,看是否配置合適。 Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03) Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode) 2、jboss安裝: (1)jboss在windows和ubuntu平臺兼容。直接可以把windows下運行正常的jboss放到ubuntu下。 (2)把jboss(文件夾名為jboss4)放到,ubuntu的 /opt/jboss目錄下,把sys_config_jboss.xml放到 ,ubuntu的 /opt/jboss/sysHome目錄下。(sysHome為新建目錄) (3)修改 /etc/profile 文件。在文件最后增加jboss環境變量。 JBOSS_HOME=/opt/jboss/jboss4 PATH=$PATH:/opt/jboss/jboss4/bin export JBOSS_HOME PATH (4)把工程的三個ggjgWebApp.war、HBSAR.sar、GGJGEJB.jar放到jboss的deploy下。其中 ggjgWebApp.war和GGJGEJB.jar的sys_init.properties中的sysHome屬性指向/opt/jboss /sysHome。 (5)啟動jboss,在jboss4的bin目錄下運行:./run.sh
    posted @ 2010-11-20 08:28 hhcto 閱讀(1121) | 評論 (0)編輯 收藏
     
    搞了很久, 終于把DB2 Express-C給裝在了Linux虛 擬機上。 我用的虛擬機是VirtualBox3.0.4, SUN出品, 只有80M左右, 嘿嘿, 用起來很方便,在虛擬機上裝過增強工具以后, 虛擬機的屏幕分辨率就會自動調整, 自動適應。 和VMWare龐大的體積比起來, 小巧了很多哦。 至于功能和性能, 我是沒感覺出有啥區別來。
        繼續說咱們的DB2。準備工作就去去IBM下載安裝包和語言包。db2exc_970_LNX_x86.tar.gzdb2exc_nlpack_970_LNX_x86.tar.gz。 
        下面開始安裝:
    1. tar -xvzf db2exc_970_LNX_x86.tar.gz
      tar -xvzf db2exc_nlpack_970_LNX_x86.tar.gz

      網上說, 可以解壓到同一個目錄里面, 自動整合, 這個我沒有試驗, 今天晚上試試。
    2. 這個時候, 如果執行db2setup的話, 會報少一個包. The required library file libaio.so.1 is not found on the system.
      Ubuntu的好處體現出來了,sudo apt-get install libaio1 安裝缺少的包。
      其實我第一次安裝的是libaio, apt-get提示我說不可用, 可以用libaio1替代。
      安裝完依賴包, 就可以用db2setup來安裝了。 因為Ubuntu一般不允許root登陸, 為了方便, 我用我的用戶安裝的。 用root權限安裝的話, 會安裝到/opt/ibm/db2下面, 用普通用戶的話, 會安裝的用戶目錄。

      嗯, 高手也可以用db2-install命令行模式安裝。 其實期間沒有交互信息的, 哪個都行。

      安裝的過程, 就不細說了, 一路next過來的。
    3. 安裝結束以后, 得記著, 要運行安裝目錄下的db2profile, 添加環境變量。. /home/richar/sqllib/db2profile 自己看清楚目錄哦。
    4. 執行結束, 運行db2start命令, 它報給我個錯:
      SQL1220NThedatabasemanagersharedmemorysetcannotbeallocated.

      網上搜了些資料, 說是共享緩存不足, 具體原理我也不清楚了。 用sysctl kernel.shmmax命令查看了共享內存。kernel.shmmax=33554432(32MB), 設置成256M
      echo 268435456 > /proc/sys/kernel/shmmax

      之后再次執行db2start, 啟動成功。
        到次, 安裝就結束了。 語言包的沒寫, 因為安裝更簡單, 直接db2setup就可以了, 根據提示, 很簡單的。
        后續的配置, 使用, 下篇文章, 我們再介紹。

    tar -xvzf db2exc_970_LNX_x86.tar.gz tar -xvzf db2exc_nlpack_970_LNX_x86.tar.gz

    本文出自 “立子” 博客,請務必保留此出處http://leaze.blog.51cto.com/83088/195583

    posted @ 2010-11-20 08:12 hhcto 閱讀(724) | 評論 (0)編輯 收藏
     
    解決qq崩潰問題,首先在終端輸入:sudo gedit /usr/bin/qq 將彈出來的代碼修改為以下代碼: #!/bin/sh export GDK_NATIVE_WINDOWS=true cd /usr/share/tencent/qq/ ./qq 這樣QQ就不會 崩潰了
    posted @ 2010-11-20 08:02 hhcto 閱讀(282) | 評論 (0)編輯 收藏
     

    網站開發時經常需要在某個頁面需要實現對大量圖片的瀏覽,如果考慮流量的話,大可以像pconline一樣每個頁面只顯示一張圖片,讓用戶每看一張圖片就需要重新下載一下整個頁面。不過,在web2.0時代,更多人愿意用javascript來實現一個圖片瀏覽器,讓用戶無需等待過長的時間就能看到其他圖片。

    知道了一張圖片的地址,需要把它在一個固定大小的html容器(可以是div等)里邊顯示出來,最重要的當然是需要知道這張即將顯示的圖片的寬和高,然后再結合容器的寬和高,按照一定的縮放比例使圖片顯示出來。因此,實現圖片預加載就成為圖片瀏覽器的核心功能了。

    做過圖片翻轉效果的朋友其實都知道,要讓圖片輪換的時候不出現等待,最好是先讓圖片下載到本地,讓瀏覽器緩存起來。這時,一般都會用到js里邊的Image對象。一般的手段無非這樣:
    function preLoadImg(url) {
      var img = new Image();
      img.src = url;
    }
    通過調用preLoadImg函數,傳入圖片的url,就能使圖片預先下載下來了。實際上,這里用到的預下載功能也和這基本一致。圖片預下載下來后,通過 img的width和height屬性,就能知道圖片的寬和高了。但是需要考慮到,在做圖片瀏覽器功能時,圖片都是實時顯示的。比如你點了顯示的按鈕,這個時候才會調用上邊類似的代碼來加載圖片。因此,如果你直接用img.width的時候,圖片還沒有完全下載下來。因此,需要用一些異步的方法,等到圖片下載完畢的時候才會再對img的width和height進行調用。

    實現這樣的異步方法實際上不難,圖片的下載完畢事件也很簡單,就是簡單的onload事件。因此,我們可以寫出下面的代碼:
    function loadImage(url, callback) {
      var img = new Image();
      img.src = url;

      img.onload = function(){ //圖片下載完畢時異步調用callback函數。
        callback.call(img);   // 將callback函數this指針切換為img。
      };
    }

    好了,再來寫一個測試用例。
    function imgLoaded(){
      alert(this.width);
    }
    <input type="button" value="loadImage" onclick="loadImage('aaa.jpg',imgLoaded)"/>

    在firefox中測試一下,發現不錯,果然和預想的效果一樣,在圖片下載后,就會彈出圖片的寬度來。無論點擊多少次或者刷新結果都一樣。

    不過,做到這一步,先別高興太早——還需要考慮一下瀏覽器的兼容性,于是,趕緊到ie里邊測試一下。沒錯,同樣彈出了圖片的寬度。但是,再點擊load的時候,情況就不一樣了,什么反應都沒有了。刷新一下,也同樣如此。

    經過對多個瀏覽器版本的測試,發現ie6、opera都會這樣,而firefox和safari則表現正常。其實,原因也挺簡單的,就是因為瀏覽器的緩存了。當圖片加載過一次以后,如果再有對該圖片的請求時,由于瀏覽器已經緩存住這張圖片了,不會再發起一次新的請求,而是直接從緩存中加載過來。對于 firefox和safari,它們視圖使這兩種加載方式對用戶透明,同樣會引起圖片的onload事件,而ie和opera則忽略了這種同一性,不會引起圖片的onload事件,因此上邊的代碼在它們里邊不能得以實現效果。

    怎么辦呢?最好的情況是Image可以有一個狀態值表明它是否已經載入成功了。從緩存加載的時候,因為不需要等待,這個狀態值就直接是表明已經下載了,而從http請求加載時,因為需要等待下載,這個值顯示為未完成。這樣的話,就可以搞定了。

    經過一些分析,終于發現一個為各個瀏覽器所兼容的Image的屬性——complete。所以,在圖片onload事件之前先對這個值做一下判斷即可。最后,代碼變成如下的樣子:
    function loadImage(url, callback) {
        var img = new Image(); //創建一個Image對象,實現圖片的預下載
        img.src = url;
      
        if (img.complete) { // 如果圖片已經存在于瀏覽器緩存,直接調用回調函數
            callback.call(img);
            return; // 直接返回,不用再處理onload事件
        }

        img.onload = function () { //圖片下載完畢時異步調用callback函數。
            callback.call(img);//將回調函數的this替換為Image對象
        };
    };
    經過這么一番折騰,總算是讓各個瀏覽器都能滿足我們的目標了。雖然代碼很簡單,但是卻把圖片瀏覽器中最核心的問題解決掉了,接下來你所要做的,僅僅是圖片如何呈現的問題了。

    posted @ 2008-07-07 16:32 hhcto 閱讀(4266) | 評論 (4)編輯 收藏
     

    常用JDBC連接字符串

    常用JDBC連接字符串
    1.MySQL

    代碼:
    Class.forName(  " org.gjt.mm.mysql.Driver "  );
    Connection conn  =  DriverManager.getConnection(  " jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName " , sUsr, sPwd );
    2.Microsoft SQLServer

    代碼:
    Class.forName(  " com.microsoft.jdbc.sqlserver.SQLServerDriver "  );
    Connection conn  =  DriverManager.getConnection(  " jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master " , sUsr, sPwd );
    3.Oracle

    代碼:
    Class.forName(  " oracle.jdbc.driver.OracleDriver "  );
    Connection conn  =  DriverManager.getConnection ("jdbc: oracle:thin: @MyDbComputerNameOrIP:1521: ORCL " , sUsr, sPwd );
    4.DB2

    代碼:
    Class.forName( " com.ibm.db2.jdbc.net.DB2Driver " );
    String url = " jdbc:db2://192.9.200.108:6789/SAMPLE "
    Connection conn  =  DriverManager.getConnection( url, sUsr, sPwd );
    5.ODBC
    代碼:
    Class.forName(  " sun.jdbc.odbc.JdbcOdbcDriver "  );
    Connection conn  =  DriverManager.getConnection("jdbc: odbc: "   +  sDsn, sUsr, sPwd );
    6.PostgreSQL

    代碼:
    Class.forName(  " org.postgresql.Driver "  );
    Connection conn  =  DriverManager.getConnection(  " jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName " , sUsr, sPwd );
    posted @ 2008-06-14 21:13 hhcto 閱讀(1150) | 評論 (0)編輯 收藏
     
    模式窗口showModalDialog詳解 
    showModalDialog()、showModelessDialog()方法使用詳解 

    Javascript有許多內建的方法來產生對話框,如:window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持對話框。如: 

      showModalDialog() (IE 4+ 支持) 
      showModelessDialog() (IE 5+ 支持) 


    window.showModalDialog()方法用來創建一個顯示HTML內容的模態對話框,由于是對話框,因此它并沒有一般用window.open()打開的窗口的所有屬性。 
    window.showModelessDialog()方法用來創建一個顯示HTML內容的非模態對話框。 

    當我們用showModelessDialog()打開窗口時,不必用window.close()去關閉它,當以非模態方式[IE5]打開時, 打開對話框的窗口仍可以進行其他的操作,即對話框不總是最上面的焦點,當打開它的窗口URL改變時,它自動關閉。而模態[IE4]方式的對話框始終有焦點(焦點不可移走,直到它關閉)。模態對話框和打開它的窗口相聯系,因此我們打開另外的窗口時,他們的鏈接關系依然保存,并且隱藏在活動窗口的下面。 

    使用方法如下: 
    vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures]) 
    vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures]) 
    參數說明: 
    sURL 
    必選參數,類型:字符串。用來指定對話框要顯示的文檔的URL。 
    vArguments 
    可選參數,類型:變體。用來向對話框傳遞參數。傳遞的參數類型不限,包括數組等。對話框通過window.dialogArguments來取得傳遞進來的參數。 
    sFeatures 
    可選參數,類型:字符串。用來描述對話框的外觀等信息,可以使用以下的一個或幾個,用分號“;”隔開。 
    dialogHeight 對話框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默認的單位是em,而IE5中是px,為方便其見,在定義modal方式的對話框時,用px做單位。 
      dialogWidth: 對話框寬度。 
      dialogLeft: 距離桌面左的距離。 
      dialogTop: 離桌面上的距離。 
      center: {yes | no | 1 | 0 }:窗口是否居中,默認yes,但仍可以指定高度和寬度。 
      help: {yes | no | 1 | 0 }:是否顯示幫助按鈕,默認yes。 
      resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改變大小。默認no。 
      status: {yes | no | 1 | 0 } [IE5+]:是否顯示狀態欄。默認為yes[ Modeless]或no[Modal]。 
    scroll:{ yes | no | 1 | 0 | on | off }:指明對話框是否顯示滾動條。默認為yes。 

    還有幾個屬性是用在HTA中的,在一般的網頁中一般不使用。 
    dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印預覽時對話框是否隱藏。默認為no。 
    edge:{ sunken | raised }:指明對話框的邊框樣式。默認為raised。 
    unadorned:{ yes | no | 1 | 0 | on | off }:默認為no。 

    傳入參數: 
    要想對話框傳遞參數,是通過vArguments來進行傳遞的。類型不限制,對于字符串類型,最大為4096個字符。也可以傳遞對象,例如: 

    test1.htm 
    ==================== 
    <script> 
    var mxh1 = new Array("mxh","net_lover","孟子E章") 
    var mxh2 = window.open("about:blank","window_mxh") 
    // 向對話框傳遞數組 
    window.showModalDialog("test2.htm",mxh1) 
    // 向對話框傳遞window對象 
    window.showModalDialog("test3.htm",mxh2) 
    </script> 

    test2.htm 
    ==================== 
    <script> 
    var a = window.dialogArguments 
    alert("您傳遞的參數為:" + a) 
    </script> 

    test3.htm 
    ==================== 
    <script> 
    var a = window.dialogArguments 
    alert("您傳遞的參數為window對象,名稱:" + a.name) 
    </script> 

    可以通過window.returnValue向打開對話框的窗口返回信息,當然也可以是對象。例如: 

    test4.htm 
    =================== 
    <script> 
    var a = window.showModalDialog("test5.htm") 
    for(i=0;i<a.length;i++) alert(a[i]) 
    </script> 

    test5.htm 
    =================== 
    <script> 
    function sendTo() 

    var a=new Array("a","b") 
    window.returnValue = a 
    window.close() 

    </script> 
    <body> 
    <form> 
    <input value="返回" type=button onclick="sendTo()"> 
    </form> 

    常見問題: 
    1,如何在模態對話框中進行提交而不新開窗口? 
    如果你 的 瀏覽器是IE5.5+,可以在對話框中使用帶name屬性的iframe,提交時可以制定target為該iframe的name。對于IE4+,你可以用高度為0的frame來作:例子, 

    test6.htm 
    =================== 
    <script> 
    window.showModalDialog("test7.htm") 
    </script> 

    test7.htm 
    =================== 
    if(window.location.search) alert(window.location.search) 
    <frameset rows="0,*"> 
    <frame src="about:blank"> 
    <frame src="test8.htm"> 
    </frameset> 

    test8.htm 
    =================== 
    <form target="_self" method="get"> 
    <input name=txt value="test"> 
    <input type=submit> 
    </form> 
    <script> 
    if(window.location.search) alert(window.location.search) 
    </script> 
    2,可以通過http://servername/virtualdirname/test.htm?name=mxh方式直接向對話框傳遞參數嗎? 
    答案是不能。但在frame里是可以的。
    posted @ 2007-09-12 11:19 hhcto 閱讀(838) | 評論 (0)編輯 收藏
     

    <----------------HTML部分--------------------->

    <style>
    .close{
      visibility:hidden;
      border : 1px solid #008000;
      position:absolute;
       }
    .open{
      visibility:visible;
      border : 1px solid #008000;
      position:absolute;
      }
    </style>
    <script language='JavaScript'>
     
     //—————顯示菜單項 menuId:當前菜單Id—————
     function showMenuItem(menuId) {
      var node = document.getElementById(menuId);
      if(node.hasChildNodes()) {
       node.style.visibility='visible';
      }
     }
     
     
     //—————隱藏菜單項 menuId:當前菜單Id—————
     function hideMenuItem(menuId) {
       document.getElementById(menuId).style.visibility='hidden';
     }
     
     //—————隱藏菜單項事件方法—————
     function hideMenuItemEvent() {
      event.srcElement.parentElement.style.visibility='hidden';
     }
     
     //—————初始化下拉框—————
     function inintSelectMenu() {
      //查找一級節點
      var resultNodes = findXmlnodes("http://mainClass",resultNodes);
      var mainClassNode = document.getElementById("mainClass");

      //給一級節點添加子子節點
       addChildrenNodes(mainClassNode,resultNodes);
      
      //緩存一級菜單選擇的默認值
      var mainClassTxtNode = document.getElementById("mainClassTxt");
      var mainClassBtnNode = document.getElementById("mainClassBtn");
      mainClassTxtNode.setAttribute("tempId",1);
      //設置下拉菜單絕對位置
      setDivAbsulotePosition(mainClassNode,mainClassTxtNode);
      //設置Btn的絕對位置
      //mainClassBtnNode.style.position = "absolute";
      //setBtnAbsulotePosition(mainClassBtnNode,mainClassTxtNode);
     
      //一級菜單
      mainClassNode.attachEvent(onblur,hideMenuItem);
      //二級菜單
      var subClassNode = document.getElementById("subClass");
      var subClassBtnNode = document.getElementById("subClassBtn");
      var subClassTxtNode = document.getElementById("subClassTxt");
      setDivAbsulotePosition(subClassNode,subClassTxtNode);
      //設置Btn的絕對位置
      //subClassBtnNode.style.position = "absolute";
      //setBtnAbsulotePosition(subClassBtnNode,subClassTxtNode);
      
      //三級菜單
      var itemClassNode = document.getElementById("itemClass");
      var itemClassBtnNode = document.getElementById("itemClassBtn");
      var itemClassTxtNode = document.getElementById("itemClassTxt");
      setDivAbsulotePosition(itemClassNode,itemClassTxtNode);
      //設置Btn的絕對位置
      //itemClassBtnNode.style.position = "absolute";
      //setBtnAbsulotePosition(itemClassBtnNode,itemClassTxtNode);
     }

     
     //—————更新下拉菜單—————
     function updateSelectMenu() {
      
      //被選擇節點Id
      var nodeId = event.srcElement.getAttribute("id");
      //被選擇節點文本子節點名
      var nodeName = event.srcElement.title != null > 5 ? event.srcElement.title : event.srcElement.childNodes.item(0).nodeValue;
      //被選擇節點父節點
      var parentNode = event.srcElement.parentElement;
      //被選擇節點父節點Id
      var parentNodeId = parentNode.getAttribute("id");
      //給文本框賦被選擇值
      document.getElementById(parentNodeId + "Txt").setAttribute("value",nodeName);
      
      //如果被選擇的是一級菜單,更新二、三級菜單
      if(parentNodeId == "mainClass") {
       //緩存一級菜單選擇
       document.getElementById(parentNodeId + "Txt").setAttribute("tempId",nodeId);
       //清空二級菜單列表
       document.getElementById("subClassTxt").setAttribute("value","請選擇");
       //清空三級菜單列表
       document.getElementById("itemClassTxt").setAttribute("value","請選擇");
       //移除二級節點
       removeChildNodes("subClass");
       //移除三級節點
       removeChildNodes("itemClass");
       //查找二級節點
       var resultSubNodes = findXmlnodes("http://mainClass[@id=" + nodeId + "]/subClass",resultSubNodes);
       //alert(resultSubNodes.length);
       var subNode = document.getElementById("subClass");
       //給二級節點添加子子節點
        addChildrenNodes(subNode,resultSubNodes);
       
       
      }
      
      //如果更新的是二級菜單,更新三級菜單
      if(parentNodeId == "subClass") {
       //獲得一級菜單緩存值
       var mainClassId = document.getElementById("mainClassTxt").getAttribute("tempId");
       //清空三級菜單列表
       document.getElementById("itemClassTxt").setAttribute("value","請選擇");
       removeChildNodes("itemClass");
       //移除三級節點
       removeChildNodes("itemClass");
       //查找三級節點
       var resultItemNodes = findXmlnodes("http://mainClass[@id=" + mainClassId + "]/subClass[@id=" + nodeId + "]/item",resultItemNodes);
       //alert(resultItemNodes.length);
       var itemNode = document.getElementById("itemClass");
       //給三級節點添加子子節點
        addChildrenNodes(itemNode,resultItemNodes);
      }
      
     }
     
     

     //—————添加子節點列表 parentNode: 父節點, childrenNodes: 子節點列表—————
     function addChildrenNodes(parentNode,childrenNodes) {
      for(i = 0; i < childrenNodes.length; i++) {
       //var tempNode = childrenNodes.item(i);
       //prompt("tempNode",tempNode.xml);
       createNode("div",childrenNodes.item(i).getAttribute("id"),childrenNodes.item(i).getAttribute("name"),parentNode);
       //alert(childrenNodes.item(i).getAttribute("name") + "  " + childrenNodes.item(i).getAttribute("id"));
      }
     }
     
     
     //—————創建子節點,并添加到父節點 type: 節點類型, id:節點Id, txt:文本節點文本值,parentNode: 父節點 —————
     function createNode(type,id,txt,parentNode) {
      //文本節點
      var txtNode = null;
      //需創建的子節點
      var subNode = null;
      
      //判斷節點類型是否為空,為空直接返回
      if(type == null) {
       return;
      }
      //創建節點
         subNode = document.createElement(type);
      
      //判斷是否包含文本是否為空,不為空則創建并添加文本子節點
      if(txt != null) {
       
       //設置文本節點彈出文字
       if(checkSelectMenuItemLength(txt)){
        subNode.title = txt;
        var txtTemp = txt.substring(0, 5) + "..." ;  
        //創建文本節點
        txtNode = document.createTextNode(txtTemp);
       }else {
        txtNode = document.createTextNode(txt);
       }
       
       //添加文本節點
       subNode.appendChild(txtNode);
      }
      
      //判斷id是否為空,不為空則添加id屬性
      if(id != null) {
       subNode.setAttribute('id',id);
      }
      subNode.attachEvent("onclick",hideMenuItemEvent);
      subNode.attachEvent("onclick",updateSelectMenu);
      subNode.attachEvent("onmouseover",romanceItem);
      subNode.attachEvent("onmouseout",unRomanceItem);
      
      //添加新建子節點到父節點
      parentNode.appendChild(subNode);
      
     }
     
     //—————查找數據節點 condition: XPath查詢條件, resultNodes:返回節點集合—————
     function findXmlnodes(condition,resultNodes) {
      //判斷查詢條件是否為空
      if(condition == null) {
       return;
      }
      // 初始化ActiveXObject DOMDocment對象
      var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
      // 設置異步方式
      xmlDoc.async=false;
      // 加載xml
      xmlDoc.load(document.getElementById("mainClassTxt").getAttribute("xmlSrc"));
      //  指定查詢語言
      xmlDoc.setProperty("SelectionLanguage","XPath");
      //  查詢并獲得節點
      resultNodes = xmlDoc.documentElement.selectNodes(condition);
      //alert(resultNodes.length); 
      return resultNodes;
     }
     
     
     //—————移除所有子節點 pareantNodeName: 父節點名—————
     function removeChildNodes(pareantNodeName) {
      var subNodes = document.getElementById(pareantNodeName).childNodes;
      var subNodeslength = subNodes.length;
      
      for (i = 0; i < subNodeslength; i++) {
        subNodes.item(0).removeNode(true);
       }
     }
     

     //—————渲染條目背景色—————
     function romanceItem() {
      event.srcElement.style.backgroundColor="cornflowerblue";
     }

     //—————反渲染條目背景色—————
     function unRomanceItem() {
      event.srcElement.style.backgroundColor="#ffffff";
     }

     //—————檢測條目長度—————
     function checkSelectMenuItemLength(txt) {
      if(txt.length > 5)
       return true;
      else
       return false;
     }
     
     //—————設置層的絕對坐標 setNode:須設置坐標的節點 consultNode:參照節點 —————
     function setDivAbsulotePosition(setNode,consultNode) {
      setNode.style.top = getPosition(consultNode).y + consultNode.offsetHeight;
      setNode.style.left = getPosition(consultNode).x;
      setNode.style.width = consultNode.offsetWidth;
     }
     
     function setBtnAbsulotePosition(setNode,consultNode) {
      setNode.style.top = getPosition(consultNode).y;
      setNode.style.left = getPosition(consultNode).x + consultNode.offsetWidth;
     
     }
     
     //—————獲取參照節點的絕對位置 node: 參照節點—————
     function getPosition(node){ 
      var left = 0; 
      var top  = 0; 
      while (node.offsetParent){ 
       left += node.offsetLeft; 
       top += node.offsetTop; 
      node = node.offsetParent; 
      } 
      left += node.offsetLeft; 
      top += node.offsetTop;
     return {x:left, y:top}; 

     
    </script>

    <html>
     <body onload="inintSelectMenu();">
      <form>
       <br><br><br><br><br><br><br><br><br><br><br><br>
       <center>
       <table>
        <tr>
        <td>
        &nbsp;&nbsp;
        主分類
        <input type='text' id='mainClassTxt' readonly='true' value="請選擇" xmlSrc="selectMenuData.xml">
         <input id='mainClassBtn' type='button' value='>>'  onclick="showMenuItem('mainClass');hideMenuItem('itemClass');hideMenuItem('subClass');" />
        </input>
         <div id='mainClass' class="close" >
         </div>
        </td>
           <td>
           &nbsp;&nbsp;
        子分類
        <input  type='text' id='subClassTxt' readonly='true' value="請選擇" >
         <input id='subClassBtn' type='button' value='>>' onclick="showMenuItem('subClass');hideMenuItem('mainClass');hideMenuItem('itemClass');"/>
        </input>
         <div id='subClass' class="close" >
         </div>
        </td>
           <td>
           &nbsp;&nbsp;
        條  目
        <input type='text' id='itemClassTxt' readonly='true' value="請選擇"  >
         <input id='itemClassBtn' type='button' value='>>' onclick="showMenuItem('itemClass');hideMenuItem('mainClass');hideMenuItem('subClass');" />
        </input>
         <div id='itemClass' class="close" >
         </div>
        </td>
        </tr>
        </table>
       </center>
      </form>
     </body>
    </html>
    <----------------HTML部分--------------------->



    <----------------XML部分--------------------->
    <classes>
     <mainClass id='1' name='book'>
      <subClass id='1' name='computer'>
       <item id='1' name='think in java'></item>
       <item id='2' name='C#'></item>
       <item id='3' name='javascript'></item>
      </subClass>
      <subClass id='2' name='literature'>
       <item id='1' name='literaturea'></item>
       <item id='2' name='literatureb'></item>
       <item id='3' name='literaturec'></item>
      </subClass>
      <subClass id='3' name='test'>
       <item id='1' name='testaaaa'></item>
       <item id='2' name='testbbbb'></item>
       <item id='3' name='testcccc'></item>
      </subClass>
      <subClass id='4' name='ssssss'>
       <item id='1' name='sssssssaaa'></item>
       <item id='2' name='sssssssbbb'></item>
       <item id='3' name='sssssssccc'></item>
      </subClass>
     </mainClass>
     <mainClass id='2' name='book2'>
      <subClass id='1' name='computer2'>
       <item id='1' name='think in java2'></item>
       <item id='2' name='C#2'></item>
       <item id='3' name='javascript2'></item>
      </subClass>
      <subClass id='2' name='literature2'>
       <item id='1' name='literaturea21'></item>
       <item id='2' name='literatureb22'></item>
       <item id='3' name='literaturec23'></item>
      </subClass>
      <subClass id='3' name='test2'>
       <item id='1' name='testaaaa21'></item>
       <item id='2' name='testbbbb22'></item>
       <item id='3' name='testcccc23'></item>
      </subClass>
      <subClass id='4' name='ssssss2'>
       <item id='1' name='sssssssaaa21'></item>
       <item id='2' name='sssssssbbb22'></item>
       <item id='3' name='sssssssccc23'></item>
      </subClass>
     </mainClass>
     <mainClass id='3' name='book3'>
      <subClass id='1' name='computer3'>
       <item id='1' name='think in java3'></item>
       <item id='2' name='C#3'></item>
       <item id='3' name='javascript3'></item>
      </subClass>
      <subClass id='2' name='literature3'>
       <item id='1' name='literaturea31'></item>
       <item id='2' name='literatureb32'></item>
       <item id='3' name='literaturec33'></item>
      </subClass>
      <subClass id='3' name='test3'>
       <item id='1' name='testaaaa31'></item>
       <item id='2' name='testbbbb32'></item>
       <item id='3' name='testcccc33'></item>
      </subClass>
      <subClass id='4' name='ssssss3'>
       <item id='1' name='sssssssaaa31'></item>
       <item id='2' name='sssssssbbb32'></item>
       <item id='3' name='sssssssccc33'></item>
      </subClass>
     </mainClass>
     <mainClass id='4' name='book4'>
      <subClass id='1' name='computer4'>
       <item id='1' name='think in java4'></item>
       <item id='2' name='C#4'></item>
       <item id='3' name='javascript4'></item>
      </subClass>
      <subClass id='2' name='literature4'>
       <item id='1' name='literaturea41'></item>
       <item id='2' name='literatureb42'></item>
       <item id='3' name='literaturec43'></item>
      </subClass>
      <subClass id='3' name='test4'>
       <item id='1' name='testaaaa41'></item>
       <item id='2' name='testbbbb42'></item>
       <item id='3' name='testcccc43'></item>
      </subClass>
      <subClass id='4' name='ssssss4'>
       <item id='1' name='sssssssaaa41'></item>
       <item id='2' name='sssssssbbb42'></item>
       <item id='3' name='sssssssccc43'></item>
      </subClass>
     </mainClass>
    </classes>
    <----------------XML部分--------------------->

    posted @ 2007-06-27 09:51 hhcto 閱讀(1156) | 評論 (1)編輯 收藏
     
    1. var newopen = function(id,level)   
    2. {   
    3.   return function()   
    4.   {   
    5.     opentree(id,level);//該函數為外部定義的一個執行函數;   
    6.   }   
    7. }   
    8. x.attachEvent("onclick",newopen(id,parseInt(level)+1));   
    9. y.attachEvent("onclick",newopen(id,parseInt(level)+2));  
    posted @ 2007-06-27 09:48 hhcto 閱讀(2885) | 評論 (0)編輯 收藏
     
    java.lang.UnsatisfiedLinkError錯誤問題

    運行一段代碼的時候報出一下錯誤:
    java.lang.UnsatisfiedLinkError: no swt-win32-3063 in java.library.path
    ? ?at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1491)
    ? ?at java.lang.Runtime.loadLibrary0(Runtime.java:788)
    ? ?at java.lang.System.loadLibrary(System.java:834)
    ? ?at org.eclipse.swt.internal.Library.loadLibrary(Library.java:100)
    ? ?at org.eclipse.swt.internal.win32.OS.<clinit>(OS.java:18)
    ? ?at org.eclipse.swt.widgets.Widget.<clinit>(Widget.java:66)
    ? ?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ? ?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    ? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    ? ?at java.lang.reflect.Method.invoke(Method.java:324)
    ? ?at astexplorer.ASTMain.compileAndRun(ASTMain.java:970)
    ? ?at astexplorer.ASTMain.main(ASTMain.java:997)
    Exception in thread "main"


    估計在你的eclipse project根目錄下沒有swt-win32-3063.dll這個文件,
    可在eclipse目錄下找到這個dll連接庫後,copy至project的根目下,應該可以解決問題的.

    另外產生java.lang.UnsatisfiedLinkError問題也有可能是project以前使用了高版本的jdk/jre編譯,
    現在使用低版本的jdk/jre執行而產生錯誤.


    你可以把org.eclipse.swt.win32.win32.x86_3.1.0.jar 里面的三個動態庫*.dll文件
    swt-awt-win32-3138.dll,swt-gdip-win32-3138.dll,swt-win32-3138.dll ? 都放到
    C:\windows\system32下面,這樣肯定可以了

    原因是swt 由C 和 C++直接實現。。。由動態鏈接庫的形式調用。所以要放到system32下
    posted @ 2006-12-17 10:38 hhcto 閱讀(13941) | 評論 (0)編輯 收藏
     
    EditPlus是很多程序員非常熟悉的編輯工具,它以占用系統資源小、操作簡便靈活、支持文件類型豐富(還能自定義文件類型)等優點而被廣泛使用。
    其實EditPlus不但有編輯程序的功能,還有靈活的編譯功能,下面就簡單介紹一下EditPlus對JAVA的編譯設置。
    實現對JAVA的編譯
    在配置EditPlus之前,我們先要將JAVA的運行環境安裝并且調試好,這里我就不再說明了。
    首先,從菜單“工具(Tools)”;“配置用戶工具...”進入用戶工具設置。
    在類別里展開“工具”樹形菜單;“用戶工具”,選擇“組和工具項目”中的“Group 1”,點擊面板右邊的“組名稱...”按鈕,將文本Group1”修改成“編譯JAVA程序”。
    然后選擇修改的組“編譯JAVA程序”,點擊“添加新工具”按鈕,選擇程序,建立“新建程序”,選中它。
    然后就是最重要的步驟(修改屬性):
    1.1 添加編譯功能
    “菜單文字”里的內容修改為“JAVAC”;
    “命令”選擇安裝JDK后的BIN目錄中的編譯程序JAVAC.EXE,如果JDK 安裝路徑為“c:\jdk”,那么此路徑為“c:\jdk\bin\javac.exe”;
    “參數”選擇“文件名稱”,即顯示為“$(FileName)”;
    “初始目錄”選擇“文件目錄”,顯示為“$(FileDir)”;選擇“捕獲輸出”復選框。
    1.2 添加執行功能
    “菜單文字”里的內容修改為“JAVA”;
    “命令”選擇安裝JDK后的BIN目錄中的編譯程序JAVA.EXE,路徑為“c:\jdk\bin\java.exe”;
    “參數”選擇“文件名(不含擴展名)”,即顯示為“$(FileNameNoExt)”;
    “初始目錄”選擇“文件目錄”,顯示為“$(FileDir)”;選擇“捕獲輸出”復選框。
    這樣就完成了基本的配置工作,下面來試著編寫一個JAVA程序來測試一下(如圖),編譯的所有信息都會顯示在輸出窗口中,雙擊某一行錯誤信息,EditPlus會自動定位到出錯行
    轉自(http://www.neeao.com/blog/article.asp?id=2400
    posted @ 2006-12-10 18:00 hhcto 閱讀(604) | 評論 (0)編輯 收藏
     

    1.靜態方法什么時候初始化,在main前還是main后
    ?在main方法后,靜態方法是屬于類的,只有在調用時才初始化(main例外,main的調用是在初始化工作完成后程序進入運行狀態時),但靜態方法在內存中只有一份;

    2.構造函數與繼承的關系
    子類的構造函數內會包含一個父類構造函數,因為在子類構造函數第一行會默認調用父類構造函數,如果覆寫該行則可以自行控制父類構造函數版本;可見得父類構造函數和子類構造函數得關系是“繼承”不是“覆寫”,(每個)子類構造函數繼承(包含)父類構造函數的一個版本,并可以有自己的部分,類似繼承,子類不完全繼承父類方法并可由自己的方法,父類私有不能繼承。

    3.接口沒有構造函數的原因
    1.接口里的方法完全抽象構造函數沒有實現體,無意義
    2.接口為了實現多繼承,子類構造函數必須調用父類構造函數,如果接口有構造函數子類不知道調用哪個父類構造函數

    4.String與StringBuffer

    String類用來表示那些創建后就不會再改變的字符串,它是immutable的。
    而StringBuffer類用來表示內容可變的字符串,并提供了修改底層字符串的方法。


    --當我們進行字符拼接時,請使用StringBuffer類而非String類,因為前者將比后者快上百倍。


    的確,在程序的太多場合我們都會進行字符串拼接工作,簡單的代碼示例如下:


    String str="You are nice.";
    str+="I love you so much.";


    如果用StringBuffer類的話,代碼如下:


    StringBuffer str= new StringBuffer("You are nice.");
    str.append("I love you so much.");


    ??????? 從表面看來String類只用一個加號(+)便完成了字符串的拼接,
    而StringBuffer類卻要調用一個append()方法,是否實現起來更簡潔,更單純呢?其實不然,
    讓我們了解一下程序運行內部發生了哪些事情:


    ??????? 經編譯后程序的bytecode(字節碼)展示出了實質:? 在用String類對象直接拼接時,
    JVM會創建一個臨時的StringBuffer類對象,并調用其append()方法完成字符串的拼接,
    這是因為String類是不可變的,拼接操作不得不使用StringBuffer類(并且--JVM會將"You are nice."和"I love you so much."
    創建為兩個新的String對象)。
    之后,再將這個臨時StringBuffer對象轉型為一個String,代價不菲!可見,在這一個簡單的一次拼接過程中,
    我們讓程序創建了四個對象:兩個待拼接的String,一個臨時StringBuffer,
    和最后將StringBuffer轉型成為的String--它當然不是最初的str了,這個引用的名稱沒變,但它指向了新的String對象。


    ??????? 而如果直接使用StringBuffer類,程序將只產生兩個對象:
    最初的StringBuffer和拼接時的String("I love you so much."),
    也不再需要創建臨時的StringBuffer類對象而后還得將其轉換回String對象。


    ??????? 可以想象,當我們的字符串要被循環拼接若干段時,
    用String類直接操作會帶來多少額外的系統開銷,生成多少無用的臨時StringBuffer對象,
    并處理多少次無謂的強制類型轉換哪。

    5. equals() 和 ==?
    ???equals() 比對象值,即屬性是否相等?
    ?? ==比引用,地址
    ?? 在編譯時期確定的兩個字符串對象引用相等(==)
    ?? 不在編譯期確定的兩個字符串字符串引用不相等

    posted @ 2006-12-10 15:13 hhcto 閱讀(391) | 評論 (0)編輯 收藏
     

    /**
    ?*默認得克隆方法為淺克隆只克隆對象得非引用類型(或者非對象型)成員
    ?*要做深克隆有兩種方法:
    ?*a.覆寫克隆方法(引用型成員的克隆方法)并且克隆時掉一次引用型成員的克隆方法!
    ?*b.序列化對象時默認為深克隆
    ?*
    ?*/
    ?
    ?class Friend implements Cloneable {
    ?? int age;
    ?? String name;
    ??
    ??public Friend(int age, String name) {
    ???this.age = age;
    ???this.name = name;?
    ??}
    ??
    ??public Object clone () throws CloneNotSupportedException {
    ???return super.clone();?
    ??}
    ???
    ?}
    ?
    ?class Person implements Cloneable? {
    ?? int age;
    ??/* *
    ?? *String 類型特殊,因為他為引用型,而且他指向的值為常量,克隆出來的對象改變他的
    ?? *值實際上是改變了克隆出來對象String類型成員的指向不會影響被克隆對象的值及其指向?
    ?? *因為引用被克隆了,我改變的是引用的指向!
    ??*/
    ?? String name;
    ??
    ?? Friend f;
    ??
    ??public Person(int age, String name, Friend f) {
    ???this.age = age;
    ???this.name = name;
    ???this.f = f;
    ??}
    ??
    ??public Object clone () throws CloneNotSupportedException {
    ???Person p = (Person)super.clone();
    ???p.f = (Friend)p.f.clone();
    ???return p;?
    ??}
    ??
    ??public String toString(){
    ??StringBuffer sb = new StringBuffer();
    ??return super.toString()+sb.append("age=").append(age).
    ???append(",name=").append(name).
    ???append("friend=").append("f.name=").
    ???append(f.name).append("f.age=").append(f.age).toString();
    ?}
    ?}
    ?
    ?
    ?public class Clonetest {
    ??public static void main(String [] args)? throws CloneNotSupportedException {
    ???Person p = new Person(4,"haha",new Friend(5,"hehe"));
    ???Person p1 = (Person)p.clone();
    ???p1.name = "oop";
    ???p1.age = 10;
    ???p1.f.name = "ooad";
    ???p1.f.age = 56;
    ???System.out.println (p);
    ??System.out.println (p1);
    ??}?
    ?}

    posted @ 2006-12-10 15:13 hhcto 閱讀(476) | 評論 (0)編輯 收藏
     
    主站蜘蛛池模板: 国产99视频精品免费专区| 亚洲乱码在线观看| 综合亚洲伊人午夜网| 免费一看一级毛片| 免费一级黄色毛片| 亚洲国产成人精品无码久久久久久综合| 四虎www免费人成| 青青青青青青久久久免费观看| 免费特级黄毛片在线成人观看| 麻豆国产VA免费精品高清在线| 日韩免费福利视频| 一本色道久久88综合亚洲精品高清| 免费人成视网站在线观看不卡| 亚洲国产成人久久综合一区77| 亚洲综合久久夜AV | 久久99国产亚洲高清观看首页| 亚洲αv久久久噜噜噜噜噜| 亚洲嫩模在线观看| 亚洲神级电影国语版| 亚洲一区二区三区高清不卡| 中文字幕亚洲综合久久综合| 国产精品亚洲精品日韩电影| 一本久久免费视频| 两个人看的www免费视频中文| 无码精品一区二区三区免费视频| 免费专区丝袜脚调教视频| 国产麻豆视频免费观看| 永久免费无码网站在线观看| 亚洲精品456播放| 国产成A人亚洲精V品无码| 亚洲特级aaaaaa毛片| 亚洲av无码成人精品区一本二本 | 女人18毛片水真多免费播放| 免费a级毛片大学生免费观看| 中文字幕无码精品亚洲资源网| 亚洲AV午夜成人影院老师机影院| 亚洲ts人妖网站| 免费无码国产V片在线观看| 日韩电影免费观看| 99视频在线精品免费观看6| 亚洲av无码天堂一区二区三区|