手機技術交流

          funabmol

          2007年11月27日 #

          關于Java包導入的一個奇怪問題(轉貼至 孫鑫)

          這篇文章起源于程序員之家論壇(http://www.sunxin.org)上的一個網友的提問,我對他的問題做了回答。具體網址:http://www.sunxin.org/bbs/dispbbs.asp?boardID=6&ID=12289&page=1

          我感覺這個問題的答案對Java的初學者來說,會有一定的幫助,所以將問題和答案整理成文。

          問題

          首先新建一個目錄存放Java源文件,或者直接在某個盤符下放置程序,例如:D:",然后按照下面的步驟進行實驗(本實驗在D:"目錄下操作)。

          Step1:編寫程序World.java,代碼如下:

          package a;

          public class World

          {

              public World()

              {

              System.out.println(", World!");

              }

          }

          Step2:編寫Hello.java,代碼如下:

          import a.World;

          public class Hello

          {

              public static void main(String[] args)

              {

                  System.out.print("Hello");

                  World world = new World();

              }

          }

          Step3:將兩個程序保存到你所建的目錄下,在這里,我們將它們保存到D:"下。

          Step4:編譯這兩個Java源文件

                 先編譯World.java,執行javac -d . World.java,在D盤生成目錄a,及其中的World.class。接下來編譯Hello.java,執行javac Hello.java,在D盤上生成Hello.class

          Step5:運行Hello

                 執行java Hello,輸出Hello, World!目前一切正常。

          Step6:修改Hello.java

          將第1行的語句“import a.World;”改為“import a.*;”,重新編譯Hello.java,出現下面的錯誤提示:

          錯誤的類文件: ."World.java

          文件不包含類 World

          請刪除該文件或確保該文件位于正確的類路徑子目錄中。

                  World world = new World();

                  ^

          Step7:根據錯誤提示進行下列操作

          按照錯誤提示,刪除 World.java 或者將 World.java 放到其他地方,則程序成功編譯運行。

          問題:

          請問為何會出現Step6中的錯誤呢?使用 import a.*;”導入a下所有類和接口,和使用“import a.World;”導入a包中具體的類,為何會產生上述的差異呢?

          回答

          當你導入一個包中所有的類時,javac在編譯時并不確定你要使用的World類是a包中的類,還是其他包中的類,它會根據你機器上的CLASSPATH環境變量的值去查找類,通常我們在CLASSPATH中會設置一個點(.),表示當前目錄,如果沒有CLASSPATH環境變量,那么在JDK1.4之后,默認也是查找當前目錄。javac在按照文件名(不包括后綴)來查找類,于是找到World.java,而這個文件根本不是字節碼文件,當然就報錯了。當你導入一個具體的類時,javac在分析源文件時就知道了你程序中用的類是a.World,那么它就在CLASSPATH環境變量下查找a目錄下的World類,正好有,于是正確執行。

          為了幫助讀者對這個問題加深理解,我給大家設計了下面的操作步驟(本文是在D盤上操作):

          1)將a目錄剪切到C:"下;
          2)再次執行javac Hello.java,你會看到同樣的錯誤。也就是證實了在出錯之前,javac還沒有去查找a包中的類(對于包是否存在的驗證已經進行)。
          3)執行set classpath=c:"。由于你明確地設置了CLASSPATH環境變量的值,并且沒有包含點(.),因此javac不會再查找當前的目錄。
          4)再次執行javac Hello.java,你會發現成功執行。

          這里面還有一個有趣的現象,如果我們將a目錄下的World.class刪除,替換為World.java,那么在編譯Hello.java時,World也會被自動編譯。

          posted @ 2007-11-27 13:52 smart 閱讀(417) | 評論 (1)編輯 收藏

          2007年11月21日 #

          Funambol DM 安裝過程

           

          Funambol DM 安裝過程

                 Funambol安裝過程包括了Java環境安裝,Mysql安裝,Jboss安裝和Funambol DM的安裝.: Java環境安裝

          1:     Java現在使用的版本是:jdk-1_5_0-windows-i586.exe.

          2:     安裝完畢,請在windows系統下設置環境變量JAVA_HOME={jdk的安裝目錄}

          JAVA_HOME=C:"Java"jdk1.5.0

          : Mysql安裝

          1:     Mysal使用的版本是: mysql-5.0.22-win32.zip

          2:     安裝完畢,要進行數據庫的創建

          3:     MySQL 中創建funambol Database

          運行如下命令為DM Server創建Database和相關的授權用戶funambol

          mysql > create database funambol_db;

          mysql > grant all on funambol_db.* to 'funambol'@'localhost' identified by 'funambol';  

          4:     檢查創建的MySQL funambol 用戶權限

          運行如下命令檢查在MySQL中創建的用戶funambol是否對funambol _db數據庫具備訪問權限:

          > mysql -u funambol

          mysql > use funambol_db;

          Database changed

          5:     安裝創建完成,可以到Mysqldata目錄查看目前創建的數據庫是否存在.

          : Jboss安裝

          1:     Jboss使用版本為:jboss-4.2.1.GA

          下載地址:

          http://sourceforge.net/project/showfiles.php?group_id=22866&package_id=16942&release_id=523619

          2:     在如上的下載頁中下載JBoss-4.2.1.GA.zip文件。

          下載完成后,將其解壓縮后即可完成安裝,解壓縮后將其放置到一個不帶空格的目錄(若目錄帶有空格,例如:C:"Program Files,日后可能會產生一些莫名的錯誤)egc:"jboss4.2.1。同時在“環境變量設置”中設置名為JBOSS_HOME的環境變量,值為JBoss的安裝路徑,如:
          JBOSS_HOME= c:"jboss4.2.1

          J2EE_HOME= c:"jboss4.2.1

          3:     拷貝mysql的驅動到jboss目錄下,

                 mysqljdbc驅動文件mysql-connector-java-3.1.12-bin.jar拷貝到c:" JBoss4.2.1"

          MySQLJDBC(如果沒有請自行創建),并在“環境變量設置”設置

          JBOSS_CLASSPATH=c:" JBoss4.2.1"MySQLJDBC"mysql-connector-java-3.1.12-bin.jar

          在此,JBoss的安裝工作已經結束,

          5:     修改run.bat文件

                 :

                 rem Add -server to the JVM options, if supported

          "%JAVA%" -version 2>&1 | findstr /I hotspot > nul

          if not errorlevel == 1 (set JAVA_OPTS=%JAVA_OPTS% -server)

          改為

          rem Add -server to the JVM options, if supported

          rem "%JAVA%" -version 2>&1 | findstr /I hotspot > nul

          rem if not errorlevel == 1 (set JAVA_OPTS=%JAVA_OPTS% -server)

          4:     測試安裝是否成功:

          運行JBoss安裝目錄"bin"run.bat,如果窗口中沒有出現異常,且出現:10:16:19,765 INFO [Server] JBoss (MX MicroKernel) [4.2.1.GA (build: SVNTag=JBoss_4_2_1_GA date=200707131605)] Started in 30s:828ms字樣,則表示安裝成功。

          5:     訪問JBOSS

          我們可以通過訪問:http://localhost:8080進入JBoss的歡迎界面,點擊JBoss Management下的JMX Console可進入JBoss的控制臺。

          6:     若啟動失敗,可能由以下原因引起:

          1JBoss所用的端口(8080109910988083等)被占用。一般情況下為8080端口被占用(例如,Oracle占用了8080端口),此時需要修改JBoss的端口,方法為進入JBoss安裝目錄"server"default"deploy"jboss-web.deployer目錄,修改其下的server.xml目錄,在此文件中搜索8080,將其改成你想要的端口即可(例如8088);

          2JDK安裝不正確;

          3JBoss下載不完全。

          : Funambol DM安裝

          1:    Funambol 使用的版本是: funambol-dm-server-3.5.2

          下載地址:

          http://www.funambol.com/opensource/downloads.html

          2:     下載Sync4J DM Server后直接解壓縮即可。具體的地址可以是C:"funambol

          3:     修改DM install.properties中的數據庫連接參數。

          文件路徑為Sync4J DM Server的根目錄下,即install.properties。所需修改的內容如下:  

          server-name=http://{your ip}:8080/funambol/dm

          dbms=mysql

          jdbc.classpath=C:/jboss-4.2.1/MySQLJDBC/mysql-connector-java-3.1.12-bin.jar

          jdbc.driver=com.mysql.jdbc.Driver

          jdbc.url=jdbc:mysql://127.0.0.1/funambol_db?zeroDateTimeBehavior=round

          jdbc.user=funambol

          jdbc.password=funambol

          注意:

          A:    如果使用MySQL,并且MySQL Serversync4j DM Server在同一臺機器上,使用127.0.0.1進行連接時,缺省情況下可以不設置口令。

          B:    server-name中提供的URL必須填寫當前安裝的DM ServerInternet合法IP地址,否則手機終端設備無法發起連接,無法完成DM配置信息的同步。

          C:使用MySQL時必須設定jdbc.url的參數zeroDateTimeBehavior=round,否則在運行DM時將出現如下錯誤信息:

          Error Executing Database Query.

          Value '0000-00-00' can not be represented as  java.sql.Timestamp 

          詳細原因參見:http://dev.mysql.com/doc/refman/5.0/en/cj-upgrading.html

          4:     修改DM Serverdefault"config"common"properties" Funambol.properties中的參數, 內容如下:

          server.uri=http://{your ip}:8080/funambol/dm

          :   server.uri中提供的URL必須填寫當前安裝的DM ServerInternet合法IP地址,否則手機終端設備無法發起連接,無法完成DM配置信息的同步。

          5:     運行Sync4j DM Server安裝腳本

          > cd funambol

          > bin"install.cmd jboss32

          BUILD SUCCESSFUL

          Total time: 12 seconds

          6:     檢查MySQL中數據庫表的創建情況

          前面的安裝步驟結束后將在MySQL Serverfunambol_db中創建相關的表,本步驟對其進行檢查。方法如下:

          > mysql -u funambol

          mysql > use funambol_db;

          mysql > show tables;

                 +----------------------------------------+

          | Tables_in_sync4jdm_db             |

          +----------------------------------------+

          | fnbl_device                           |

          | fnbl_dm_state                     |

          | fnbl_id                              |

          | fnbl_principal                       |

          | fnbl_role                                 |

          | fnbl_treediscovery_processor   |

          | fnbl_user                               |

          | fnbl_user_dm_demo              |

          | fnbl_user_role                        |

          +----------------------------------------+

          9 rows in set (0.00 sec)

          7:     啟動Sync4j DM Server

                 當安裝成功后,系統會自動在bin目錄下生成start.cmd/sh文件.

          > cd funambol

          > bin"start.cmd

          注意: 所有的字符都是大小寫敏感,所以上面紅色字體一定按照實際情況的大小寫進行組織.

          posted @ 2007-11-21 10:08 smart 閱讀(3082) | 評論 (1)編輯 收藏

          僅列出標題  

          My Links

          Blog Stats

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 崇仁县| 密云县| 乌鲁木齐市| 瑞金市| 清徐县| 大埔区| 边坝县| 佛教| 商南县| 田林县| 镇宁| 岳阳市| 贡觉县| 津南区| 湖州市| 鹰潭市| 平昌县| 广西| 高清| 铜陵市| 资溪县| 桐乡市| 安徽省| 鄂尔多斯市| 突泉县| 吉木乃县| 自治县| 灵台县| 武隆县| 永州市| 铜陵市| 凯里市| 泗水县| 民丰县| 津市市| 北碚区| 永昌县| 新宾| 湛江市| 阿城市| 望谟县|