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

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

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

    OMG,到底在尋找什么..................
    (構造一個完美的J2EE系統所需要的完整知識體系)
    posts - 198,  comments - 37,  trackbacks - 0
    原貼地址:http://www.gbunix.com/htmldata/2004_12/14/19/article_770_1.html

    回顧一下昨天所學習的基于連接池的Socket,其原理中的要點如下:服務器開放有限個PooledConnectionHandler線程用來處理連接;客戶的連接請求均加入到Pool連接池中(實際是linklist()對象);PooledConnectionHandler一旦發現連接池中有連接請求,就立即著手處理;大家都使用同一個Pool(所以它是靜態變量)

    目前為止,有關Java程序設計的一些基本內容都已經學習的差不多了.現在是學以致用的時候了.學習任何語言,要想真正的談得上入門,都應該以一個實際的編程經驗為標志的,我想.

    以前用C++編過一個俄羅斯方塊,覺得這個游戲的程序設計挺能體現面向對象的思想的.Java和C++有很多共同點,依葫蘆畫瓢誰都會,那么就重新實現一遍吧,反正也忘得差不多了,權當溫故知新.另外,既然花了那么多時間來研究Socket,那就索性編出一個網絡版的來.

    俄羅斯方塊的程序需要圖形用戶界面(GUI),而前面編的Java程序中,只有Applet程序實現了圖形界面,但那是在AppletViewer或者瀏覽器的幫助下完成的.用Java來實現圖形用戶界面,我們需要用到Frame類.Frame類是窗口類(windows)類的子類,是圖形用戶界面的基本窗口.閱讀下面一個小程序并實現一下,就基本上可以對Java下的圖形用戶界面有所了解了.

    文件名:FrameMemo.java
    功能:彈出一個帶有菜單的框架并且在框架里顯示信息.在窗口中任意位置點擊一下,程序退出.

    import java.awt.*;

    public class FrameMemo extends Frame
    {
    ? public String motd;

    ? public FrameMemo(String s)
    ? {
    ??? super(s);//super在這里代表的是父類,和this所代表的本類相應,因此這里調用的是父類的構造函數
    ??? motd=s;
    ??? resize(300,300);
    ??? SetMenu();
    ? }

    ? public FrameMemo()//重載的構造函數
    ? {
    ??? this("This is a Memo of Frame");//這里調用的是FrameMemo(S)構造 函數
    ??? SetMenu();
    ? }

    ? public void SetMenu()
    ? {
    ??? Menu m,n;
    ??? m=new Menu("Examples");
    ??? m.add(new MenuItem("Basic"));
    ??? m.add(new MenuItem("Simple"));

    ??? n=new Menu("More Examples");
    ??? n.add(new MenuItem("Sub Basic"));
    ??? m.add(n);

    ??? MenuBar mb=new MenuBar();
    ??? mb.add(m);
    ??? setMenuBar(mb);
    ? }

    ? public void paint(Graphics g)
    ? {
    ??? g.drawString(motd,15,15);
    ??? g.drawString("Click anywhere to Exit",45,45);
    ??
    ? }

    ? public void start()
    ? {
    ??? show();
    ? }

    ? public boolean mouseDown(Event e,int x,int y)
    ? {
    ??? hide();//隱藏窗口
    ??? dispose();//釋放資源
    ??? System.exit(0);
    ??? return false;
    ? }

    ? public static void main(String args[])
    ? {
    ??? FrameMemo m;
    ??? m=new FrameMemo();
    ??? m.start();
    ? }
    }

    建立了窗口之后,我們還需要在窗口中擺放各種圖形界面對象,也就是說要布局.布局的原理在前面介紹過,需要使用到布局容器,然后把對象按照一定的規則填進去.下面一個例子中演示了大部分我們需要用到的容器.我給出了很詳細的注釋,幫助我以后一旦忘了Java的語法后,可以迅速的尋找失去的記憶.

    file://布局范例
    file://j2sdk1.4.1下編譯通過

    import java.awt.*;
    import java.applet.*;

    public class Layout extends Frame
    {
    ? Panel fnames,styles;//兩個字體按鈕放到fnames這個Panel中,三個風格按鈕放到styles這個Panel中
    ? Button sans,serif;
    ? Button bold,bigger,smaller;//定義兩個字體按鈕,三個風格按鈕
    ? SampleCanvas sample;//定義重載后的畫布對象
    ? String fName=new String("SansSerif");
    ? int fBold=0;
    ? int fSize=12;

    ? public Layout(){
    ??? super("A Memo of Layout");
    ??? setFont(new Font("Sans",Font.BOLD,12));
    ??? setLayout(new BorderLayout());//設置BorderLayout布局,該方式可安排五個元素
    ????????????????????????????????? file://方位為東西南北中

    file://下面的程序為設置底部即南邊的兩個按鈕
    ??? fnames=new Panel();
    ??? fnames.setLayout(new GridLayout(1,2,5,10));//為panel設置GridLayout布局
    ?????????????????????????????????????????????? file://該布局為網格布局
    ?????????????????????????????????????????????? file://四個參數分別為
    ?????????????????????????????????????????????? file://行數,列數,水平間隔(像素),垂直間隔(像素)
    ??? sans=new Button("Sans Serif");
    ??? fnames.add(sans);
    ??? serif=new Button("Sans Serif");
    ??? fnames.add(serif);??????????????????????? file://分別添加兩個按鈕

    ??? add(fnames,"South");????????????????????? file://將Panel列入BorderLayout布局中

    file://下面的程序為設置左部即西邊的三個按鈕
    ??? styles=new Panel();
    ??? styles.setLayout(new GridLayout(3,1,10,5));
    ??? bold=new Button("Bold");
    ??? styles.add(bold);
    ??? bigger=new Button("bigger");
    ??? styles.add(bigger);
    ??? smaller=new Button("Smaller");
    ??? styles.add(smaller);
    ??? add(styles,"West");
    ??? sample=new SampleCanvas();
    ??? add(sample,"Center");
    ??? setSize(200,200);//這句話別掉羅
    //??? setVisible(true);
    ? ?
    ? }
    ?
    ? public void start(){
    ??? show();
    ? }??
    ?
    ? public static void main(String[] args)//初始化
    ? {
    ??? Layout MainFrame=new Layout();
    ??? MainFrame.start();
    ???
    ? }

    ? class SampleCanvas extends Canvas
    ? {
    ??? String message;

    ??? public SampleCanvas()??? file://類的構造函數
    ??? {
    ????? rewrite("SanSerif");?? file://只在創建對象的時候執行,java不支持析構函數
    ??? }

    ??? public void rewrite(String s)
    ??? {
    ????? setFont(new Font(fName,fBold,fSize));
    ????? message="This font is"+fName;
    ????? repaint();
    ??? }

    ??? public void paint(Graphics g)
    ??? {
    ????? g.drawString(message,10,50);
    ??? }
    ? }
    }

    (1月28日)在網絡版的俄羅斯方塊程序中,應該包含有以下幾個類:

    1.MainFrame:主界面類,從Frame繼承,基本定義及類中方法功能如下

    class MainFrame extends Frame{
    ? public MainFrame(){//初始化工作,主要是給對象(按鈕,畫布等)布局
    ? }?
    ? public boolean keyDown(Event e,int key){//處理鍵盤操作
    ? }
    ? public boolean action(Event e,Object arg){//處理鼠標操作
    ? }???
    ? public void start(){//看前幾天筆記
    ??? show();
    ? }
    ? public static void main(String args[]) throws IOException{
    ??? MainFrame app;
    ??? app=new MainFrame();
    ??? app.start();?
    ? }
    }

    2.MainCanvas類.該畫布對象將完成所有與方塊有關的邏輯操作,從Canvas類繼承

    3.Block類,即方塊類.該類存有方塊的形狀的信息(一個多維數組)等等,該類將與MainCanvas類相輔相成.實際上也是可以將Block和MainCanvas做成一個類的,在我原來的C++版本中就是這樣的.但是,從面向對象的觀點來考慮,分成兩個類比較合適.

    4.ClientThread類,即客戶端的線程類

    5.ServerThread類,即服務器端的線程類

    ServerThread和ClientThread負責網絡同步的操作

    分析到這一部工作就基本上完成了.我決定放棄具體實現網絡版俄羅斯方塊的計劃,因為重復我曾經十分熟悉的思路是一件十分無趣的事情.

    我準備將目標鎖定在基于Java Applet的電子白板的實現上.相關的研究我會放到年后的另一個系列當中.

    歷時半個月的菜鳥筆記終于結束了.15天對于任何一門語言的入門都已經足夠,畢竟語言只是體現設計思想的工具,對于任何一種工具的熟悉和使用都不應該花費太多時間.如何用工具打造精美的藝術品才是應該時常在腦海中思索的.

    在Java入門的過程當中,有三本書給了我不少的幫助.第一本是機械工業出版社的<Java簡明教程>,由一個英國人撰寫的.書中語言條理清楚,深入淺出,兩天時間就完全可以讓你初步掌握Java的基礎.給我的感覺,國外人寫最基礎的和最深奧的技術類教材都很有一手.第二本是譚浩強主編的<Java程序設計>,名副其實的入門級參考書,對初學者來說,內容比較齊全.最后一本是chm格式的Think in Java,幫助我更加深入的了解Java,尤其是線程和同步方面的內容.另外,我曾經舉過的所有關于Socket的范例都源自于網上下的一套如何用java編寫Socket程序的教材.這套教材也非常實用.

    好了,祝CDSN的朋友新年快樂!過 年 去!

    附:下載地址
    1.書名:Java 套接字(socket)101
    ?? 注釋:本教程將告訴您什么是套接字(socket)并教您如何在 Java 程序中使用它。通過實際分析幾個示例,從單個客戶機/服務器通訊到池中的一組客戶機訪問服務器,您將學到如何用套接字處理現實世界中碰到的典型情形。
    ?? URL:? http://www-900.ibm.com/developerWorks/cn/education/java/j-sockets/tutorial/j-sockets.zip

    2.書名:Think in Java(中文版)---chm格式
    ? URL:? http://www.code-labs.com/manual/Think%20In%20Java.chm

    目前仍然有效

    posted on 2006-11-22 10:16 OMG 閱讀(260) 評論(0)  編輯  收藏 所屬分類: Soket

    <2006年11月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風云人物

    文檔

    朋友

    相冊

    經典網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99久久亚洲综合精品成人网| 亚洲av无码成人精品区在线播放| 久久久久亚洲AV无码专区首| 国产99精品一区二区三区免费| 免费中文字幕不卡视频| 亚洲av永久中文无码精品| 免费看a级黄色片| 亚洲AV无码成人网站在线观看| 精品免费国产一区二区三区 | xvideos亚洲永久网址| 黄色a级免费网站| 浮力影院亚洲国产第一页| 久久精品无码免费不卡| 亚洲精品亚洲人成在线观看| 无码精品一区二区三区免费视频| 老汉色老汉首页a亚洲| 永久免费AV无码国产网站| 亚洲av无码成人影院一区| 久久久久久久亚洲精品| 在线看片免费人成视频福利| 亚洲黄色在线网站| 国产精品成人免费一区二区| 在线视频亚洲一区| 国产国拍亚洲精品福利 | 久久精品无码专区免费| 精品亚洲麻豆1区2区3区| 三年片在线观看免费观看高清电影| 亚洲综合久久精品无码色欲| 免费v片在线观看无遮挡| 少妇性饥渴无码A区免费| 亚洲国产精品成人综合色在线婷婷| 嫩草影院免费观看| 成人妇女免费播放久久久| 亚洲精品免费在线| 四虎影永久在线高清免费| 国产免费一区二区视频| 亚洲va久久久久| 日本红怡院亚洲红怡院最新| 成人影片麻豆国产影片免费观看 | 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲综合久久久久久中文字幕|