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

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

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

    一切皆可抽象

    大而無形 庖丁解牛 厚積薄發 滌慮玄覽
       ::  ::  ::  ::  :: 管理

    問: 如何設置Java 2(JDK1.2)的環境變量?
    答:
    Java 2安裝后,需要設置PATH和JAVA_HOME環境變量.與JDK1.1不同的是:設置好JAVA_HOME環境變量后,JVM將自動搜索系統類庫以及用戶的當前路徑.
    Java 2環境變量的設置如下例所示:
    Solaris平臺: setenv JAVA_HOME Java2的安裝路徑
    setenv PATH $JAVA_HOME/bin:${PATH}
    Windows平臺: set JAVA_HOME=Java2的安裝路徑
    set PATH=$JAVA_HOMEbin;%PATH%

    問: 哪些Java集成開發工具支持Java 2?
    答:
    目前流行的Java集成開發環境,如Inprise的JBuilder,Symantec的Visual Cafe, Sybase的PowerJ,都支持Java 2.

    問: 如果在Netscape或IE瀏覽器中運行Java applet時出現了錯誤,如何確定錯誤范圍?
    答:
    當java applet在瀏覽器中運行時,使用的是瀏覽器本身的缺省JVM.而不同瀏覽器對JDK的支持程度也不盡相同. 因此,在Netscape或IE瀏覽器中運行Java applet出現了錯誤,建議使用JDK提供的工具appletviewer或Sun公司的Hotjava瀏覽器來測試該applet,以確定錯誤的產生是與瀏覽器相關.
    如果applet在appletviewer或Hotjava中運行一切正常,則錯誤的產生是由于瀏覽 器不完全兼容JDK而引起的. 此時,解決方法可以是使用Hotjava瀏覽器或者安裝 Sun公司的Java Plugin.
    如果applet在Hotjava瀏覽器或appletviewer中運行即發生錯誤,則應當根據錯誤 提示檢查applet程序.

    問: 當用JDBC向數據庫中插入數據或從數據庫中提取數據時,為何有時中文字符會顯示為亂碼?
    答:
     這個問題的實現通常與各個JDBC driver的實現有關. 目前大多數JDBC driver采用本地編碼格式來傳輸中文字符,例如中文字符"0x4175"會被轉成"0x41"和"0x75"進行傳輸. 因此我們需要對JDBC driver返回的字符以及要發給JDBC driver的字符進行轉換.
    當用JDBC driver向數據庫中插入數據時,需要先將Unicode轉成native code; 當 JDBC driver從數據庫中查詢數據時,則需要將native code轉換成Unicode. 下面給出了這兩種轉換的實現:

    String native2Unicode(String s) {
    if (s == null || s.length() == 0) {
    return null;
    }
    byte[] buffer = new byte[s.length()];
    for (int i = 0; i s.length(); i++) { if (s.charAt(i)>= 0x100) {
    c = s.charAt(i);
    byte []buf = (""+c).getBytes();
    buffer[j++] = (char)buf[0];
    buffer[j++] = (char)buf[1];
    }
    else {
    buffer[j++] = s.charAt(i);
    }
    }
    return new String(buffer, 0, j);
    }
    除使用以上兩個方法之外,有些JDBC driver如果對jdbc driver Manager設置了正確 的字符集屬性,以上2個方法就不需要了.

    問:當用Servlet來處理http請求并產生返回的HTML頁面時,如何使HTML頁面中的中文字符能夠正常顯示?
    答:
    javax.servlet.http.HttpResponse類用于產生返回頁面.通過HttpResponse定義的方法getOutputStream()可以獲得ServletOutputStream的實例,這樣用戶就可以利用ServletOutputStream.write方法向輸出流中寫入返回頁面的內容. 但是ServletOutputStream使用的是缺省的編碼方式,如果要使返回頁面中的中文字 符能夠正常顯示,最好顯示地指定所用的字符編碼方式. 通常需要構造一個 OutputStreamWriter , 例程如下:

    public void doGet (HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
    {
    res.setContentType("text/html");
    ServletOutputStream out = res.getOutputStream();
    OutputStreamWriter ow = new OutputStreamWriter(out,"GB2312");
    ow.write("這是測試");
    ow.flush();
    ow.close();
    }

    問:如何設置Java WebServer的CLASSPATH,以包含用戶的class文件?
    答:
    有兩種方法可以設置Java WebServer的CLASSPATH環境變量,以使用戶編寫的Servlet能夠調用用戶的class文件.
    將用戶的class文件放到 JavaWebServer_Dir/classes目錄下,在Java WebServer 啟動時,classes目錄被自動加入到CLASSPATH環境變量中了.
    修改httpd.nojre文件,將用戶class文件所在的路徑名加到CLASSPATH環境變量中.

    問:為什么在Windows平臺上用Naming.lookup來獲取遠程RMI對象時會很慢?
    答:
    機器的網絡設置不正確很可能會引起該問題的發生.
    RMI使用了Java網絡類,特別是java.net.InetAddress類,它將查詢TCP/IP的主機名, 包括IP地址到主機名的映射和主機名到IP地址的映射.在Windows平臺,這種查詢功能 是由本地的Windows Socket庫來實現的. 因此延時是發生在Windows庫中,而非RMI中.
    如果你的機器設置成使用DNS,問題通常是DNS服務器查不到主機名,你所發現的延時 是DNS查詢的延時. 請嘗試將RMI通信中涉及到的所有主機名/IP地址加到本地文件winntsystem32driversetchosts或windowshosts中. 格式如下:

    IP地址 主機名

    如此設置應當可以明顯地減少查詢所花的時間.

    問: 編寫Java application時,如何設置proxy的信息,以便訪問外部網站?
    答:
    若在java application中訪問外部網站,首先應設置proxy信息,樣例代碼如下:

    import java.util.properties;

    .....

    Properties sys = System.getProperties();
    sys.put("proxySet","true");
    sys.put("proxyHost","myHTTP.proxyserver.com");
    sys.put("proxyPort","80");
    System.setProperties(sys);
    u = new URL(website);
    connect = (HttpURLConnection)u.openConnection();
    .....


    問: Swing組件JList的列表數據修改了,如何通知JList改變顯示?
    答:
    JList組件有一個單獨的顯示模式ListModel來表示JList的顯示數據.
    JList創建以后,JList數據元素的值及數據元素的數量可以動態地改變.
    JList在它的數據模式ListModel中觀察數據的改變.因此,一個ListModel 的正確實現應當在每次數據發生改變時,通知事件的監聽者.
    當使用構造函數JList(Object[])創建一個JList的實例時,系統將自動 創建一個DefaultListModel的實例來存儲JList的顯示數據, 可以調用 DefaultListModel中定義的簡便方法來動態地修改JList的數據,如 removeElementAt(index),addElement(Object)等. DefaultListModel 在修改數據的同時,將通知JList關于數據的改變.

    問:在Java applet中如何實現一個模式對話框?
    答:
    在Java applet中實現模式對話框的關鍵就是在創建一個對話框的時候 要為該對話框指定一個正確的父窗口.因為Applet是Panel類的子類,不 可以作為對話框的父窗口,所以首先要獲得applet所在的窗口,作為模式 對話框的父窗口. 樣例代碼如下:
    .....
    Dialog d = new Dialog( getParentWindow(comp),title);
    // comp為applet上的任意一個組件
    ....
    public void getParentWindow(Component compOnApplet,String title){
    Container c = compOnApplet.getParent();
    while (c != null) {
    if (c instanceof Frame)
    return (Frame) c;
    c = c.getParent();
    }
    return null;
    }

    問: 在Java applet中如何顯示另外一個HTML頁面?
    答:
    通過java.applet.Applet.getAppletContext()方法可以獲得與該applet相關的AppletContext, AppletContext.showDocument(URL)方法就可以使applet所在的瀏覽器顯示另外一個網頁.

    問: 用JDK實現的簽名applet,可否在Netscape或IE中運行?
    答:
    用JDK實現的簽名applet,不可以在Netscape或IE中運行,但是可以在Hotjava瀏覽器中運行.
    不同的瀏覽器提供了不同的簽名applet機制,如Netscape提供了zigbert工具和 Capability API, 而IE則需要使用CAB文件. 但是,無論是Netscape工具產生的 簽名applet,還是用IE產生的簽名applet,都不可以在其它的瀏覽器中運行.
    如果要使JDK產生的簽名applet能夠在Netscape或IE中運行,解決方法是在 Netscape或IE中安裝Java Plugin,則用JDK實現的簽名applet就可以在這兩種 瀏覽器中運行.

    問: 用JNI技術可以從Java應用中調用C程序庫,但是如何使該C程序庫可以調用另外的C程序庫?
    答:
    如果一個被Java調用的C程序庫C1仍需要調用另外一個C程序庫C2,那么在編譯C1的時候應當聯接程序庫C2,步驟如下(Solaris平臺):
    編寫調用C庫的Java文件,并編譯.
    javac java文件名

    產生C程序頭文件
    javah -jni java文件名(不帶后綴.java)

    編寫被Java調用的C程序C1.c,以及被C1調用的C2.c,并編譯.
    cc -G -Iinclude路徑名 C2.c -o libC2.so
    cc -G -Iinclude路徑名 -lC2 C1.c -o libC1.so

    設置環境變量
    setenv LD_LIBRARY_PATH libC1.so,libC2.so所在路徑:${LD_LIBRARY_PATH}

    運行java應用

    問: 在Java語言中,如何列出PC機文件系統中的所有驅動器名?
    答:
    在Java 2版本中,java.io包中的File類新增加了方法listRoots()可以實現這一功能.

    問: 為什么Runtime.exec("ls")沒有任何輸出?
    答:
    調用Runtime.exec方法將產生一個本地的進程,并返回一個Process子類的實例,該實例可用于控制進程或取得進程的相關信息. 由于調用Runtime.exec方法所創建的子進程沒有自己的終端或控制臺,因此該子進程的標準IO(如stdin,stdou,stderr)都通過Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream()方法重定向給它的父進程了.用戶需要用這些stream來向 子進程輸入數據或獲取子進程的輸出. 所以正確執行Runtime.exec("ls")的例程如下:
    try
    {
    process = Runtime.getRuntime().exec (command);
    InputStreamReader ir=newInputStreamReader(process.getInputStream());
    LineNumberReader input = new LineNumberReader (ir);
    String line;
    while ((line = input.readLine ()) != null)
    System.out.println(line);
    }
    catch (java.io.IOException e){
    System.err.println ("IOException " + e.getMessage());
    }

    問: 如何產生簽名applet,以使applet能夠訪問本地資源?
    答:
    在jdk1.1中,可以使用javakey命令來產生公鑰,私鑰,證書和簽名的jar文件,詳細資料 請參考: http://java.sun.com/security/usingJavakey.html而java 2對簽名機制做了比較大的改進,允許用戶更靈活地設置安全權限.Java 2提供了三個工具:keytool,policytool和jarsigner來實現簽名applet.例如,Joe編寫了一個簽名applet:SignedApplet.java,那么產生一個簡單的簽名applet的過程如下:

    //產生密鑰,密鑰別名為joe,口令為sign12,存放在密鑰庫joestore中
    keytool -genkey -alias joe -keypass sign12 -keystore joestore
    //將SignedApplet.class及相關文件打包成jar文件
    jar cvf SignedAppletDemo.jar
    //利用keytool生成的自簽名的證書產生簽名applet(jar文件)
    jarsigner -keystore joestore -signedjar joe.jar SignedAppletDemo.jar joe
    //將自簽名證書從keystore中輸出到文件
    keytool -export -keystore joestore -alias joe -file joe.cer
    而對于簽名applet的接受方Susan,需要通過如下步驟來安全地執行
    Joe編寫的簽名applet:
    //得到Joe的證書并將之讀入到密鑰庫中susanstore中
    keytool -import -alias joe -file joe.cer -keystore susanstore
    //運行policytool產生滿足Susan要求的policy文件
    policytool
    //用appletviewer運行之,或在瀏覽器中安裝java plugin來運行之.
    關于簽名applet在Java Plugin中的部署請參考以下網頁: http://java.sun.com/security/signExample12/

    注:以上的例子為簡單起見,使用了keytool產生的自簽名證書.其實,用戶也可以使用keytool -certreq向商業CA中心申請電子證書.

    問:若通過ObjectOutputStream向一個文件中多次以追加方式寫入object,為什么用ObjectInputStream讀取這些object時會產生StreamCorruptedException?
    答:
    使用缺省的serializetion的實現時,一個ObjectOutputStream的構造和一個ObjectInputStream的構造必須一一對應.ObjectOutputStream的構造函數會向輸出流中寫入一個標識頭,而ObjectInputStream會首先讀入這個標識頭.因此,多次以追加方式向一個文件中寫入object時,該文件將會包含多個標識頭.所以用ObjectInputStream來deserialize這個ObjectOutputStream時,將產生StreamCorruptedException.一種解決方法是可以構造一個ObjectOutputStream的子類,并覆蓋writeStreamHeader()方法.被覆蓋后的writeStreamHeader()方法應判斷是否為首次向文件中寫入object,羰?則調用super.writeStreamHeader();若否,即以追加方式寫入object時,則應調用ObjectOutputStream.reset()方法.

    問: 對象的序列化(serialization)類是面向流的,應如何將對象寫入到隨機存取文件中? 答:
    目前,沒有直接的方法可以將對象寫入到隨機存取文件中,但是可以使用ByteArray輸入/輸出流作為中介,來向隨機存取文件中寫入或從隨機存取文件中讀出字節,并且可以利用字節流來創建對象輸入/輸出流,以用于讀寫對象.需要注意的是在字節流中要包含一個完整的對象,否則讀寫對象時將發生錯誤. 例如,java.io.ByteArrayOutputStream可用于獲取ObjectOutputStream的字節流,從中可得到byte數組并可將之寫入到隨機存取文件中.相反,我們可以從隨機存取文件中讀出字節數組,利用它可構造ByteArrayInputStream,進而構造出ObjectInputStream,以讀取對象.

    問: 運行RMI應用時,可不可以不手工啟動名字服務rmiregistry,而是從程序中啟動之?
    答:
    可以. java.rmi包中提供了類java.rmi.registry.LocateRegistry,用于獲取名字服務或創建名字服務.調用LocateRegistry.createRegistry(int port)方法可以在某一特定端口創建名字服務,從而用戶無需再手工啟動rmiregistry.此外,LocateRegistry.getRegistry(String host,int port)方法可用于獲取名字服務.

    問: 使用類PrintJob進行打印操作時,應如何設置打印機名等打印屬性?
    答:
    使用如下方法可以獲得PrintJob的實例用于控制打印操作:
    Toolkit.getPrintJob(Frame f, String jobtitle, Properties prop)
    那么對于打印屬性的設置可以通過對prop的屬性設置來實現,打印屬性包括:
    awt.print.destination: 可以是"printer"或"file"
    awt.print.printer: 打印機名
    awt.print.fileName: 打印文件名
    awt.print.numCopies: 打印份數
    awt.print.options: 打印命令的打印選項
    awt.print.orientation: 打印方向,可以是"portrait"或"landscape"
    awt.print.paperSize: 紙張大小,可以是"letter","legal","executive"或"a4"

    問:在JDK1.1中Thread類定義了suspend()和resume()方法,但是在JDK1.2中已經過時,應使用什么方法來替代之?
    答:
    Thread.suspend本身易于產生死鎖.如果一個目標線程對某一關鍵系統資源進行了加鎖操作,然后該線程被suspend,那么除非該線程被resume,否則其它線程都將無法訪問該系統資源.如果另外一個線程將調用resume,使該線程繼續運行,而在此之前,它也需要訪問這一系統資源,則將產生死鎖.
    因此,在Java 2中,比較流行的方式是定義線程的狀態變量,并使目標線程輪詢該狀態變量,當狀態為懸掛狀態時,可以使用wait()方法使之處于等待狀態.一旦需要該線程繼續運行,其它線程會調用notify()方法來通知它.

    問: 使用JDBC編程,應如何控制結果集ResultSet的指針,使之能夠上下移動,以及移動到結果集的第一行和最后一行?
    答:
    在JDK1.1中,ResultSet類中只定義了next()方法支持數據指針的下移.但在Java 2中,ResultSet類增加了如下方法支持數據指針的移動,包括:

    ResultSet.first():將數據指針移到結果集的第一行
    ResultSet.last(): 將數據指針移到結果集的最后一行
    ResultSet.previous(): 將數據指針上移一行

    以上的方法定義在JDBC2.0的規范中,所有支持JDBC 2.0的JDBC驅動程序都可以支持上述方法.目前Intersolv和OpenLink等JDBC驅動程序廠商均有產品支持JDBC 2.0 .

    問: 哪幾種Web Server支持Servlet?如何使IIS支持Servlet?
    答:
    目前,支持Servlet的服務器端產品主要有: Sun公司的Java WebServer,Lotus DominoGo WebServer,BEA weblogic Tengah Server,Jigsaw,NetForge,AcmeServer和Mot Bays Jetty等.
    此外,一些第三方廠商也開發了Servlet engine,以使其它WebServer(如Netscape Web Server,IIS等)能夠運行Servlet,如LiveSoftware的Jrun(http://www.livesoftware.com/ products/jrun/)等.

    問: 如何在Java應用中將圖像存儲到圖像文件中?
    答:
    Java Advanced Imaging API(包含在Java Media API中)允許在Java應用中執行復雜的,高性能的圖像處理.JAI API提供了存儲圖像的能力.目前,JAI API支持以下幾種圖像文件格式:BMP,JEPG,PNG,PNM,TIFF.下面給出了將圖像存儲到BMP文件的一段代碼:
    OutputStream os = new FileOutputStream(fileToWriteTo);
    BMPEncodeParam param = new BMPEncodeParam();
    ImageEncoder enc = ImageCodec.createImageEncoder("BMP", os, param);
    enc.encode(img);
    os.close();
    有關存儲圖像文件的編程指南請參考以下網頁:
    http://java.sun.com/products/jav ... velopers/jai-guide/

    問: 如何用Java語言向串口讀寫數據?
    答:
    Sun公司的Java Communication API2.0可用于讀寫串口,它支持RS232串口和IEEE 1284 并口,提供了一種與平臺無關的串/并口通信機制.

    posted @ 2005-10-13 09:01 鋒出磨礪 閱讀(696) | 評論 (0)編輯 收藏

    如果你有一千個蘋果,有十個箱子,那么現在我要把一千個蘋果放進十個箱子里面,
    放了完之后,不管誰跟我要多少蘋果(包括1000以內的喲),我都可以整箱整箱給
    他,這個問題有解嗎?

    我的思路。
    我從1開始推理的。如果你需要1個,必然有1個箱子裝一個。
    需要兩個,要么給一個箱子裝2個,要么再裝一個的箱子。感覺
    還是裝2個為一箱比較好。那么需要3個時候,就1+2了,那么你需要4個怎么辦。
    是裝一個4個呢,還是裝一個或者2個呢。為了省箱子,我裝4個。
    此時,我發現了規律,1,2,4。那么下一個是8,再下去就是16了,接著32。
    。。。。。。。
    如果有100個,到32的時候,下一個就是64了,總數超過100了。思路改為
    100-(1+2+4+8+16+32)=37。最后一個箱子裝37個。
    當要求的蘋果數在1+2+4+8+16+32=63 和100之間的時候,將算法推諉
    給前面即可。就是先拿37個,剩下的從以前的箱子拼湊。
    至此,推理完畢。

    java實現代碼


    /**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2005</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */

    public class Box {
      private int limit;
      private int code;
      private int applenum;


      public Box(int code,int applenum,int limit) {
         this.limit = limit;
         this.code  = code;
         this.applenum = applenum;

      }
      public int getApplenum() {
        return applenum;
      }
      public int getCode() {
        return code;
      }
      public int getLimit() {
        return limit;
      }
      public void setLimit(int limit) {
        this.limit = limit;
      }
      public void setCode(int code) {
        this.code = code;
      }
      public void setApplenum(int applenum) {
        this.applenum = applenum;
      }

    }


    /**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2005</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */

    public class Apple {
      public Apple() {
      }
      final private int max=100;   // 蘋果總數
      static int   xqs = 99;       // 你需要的蘋果數
      private java.util.Vector Boxvec = new java.util.Vector(); // 箱子和箱子里的蘋果
      private int ai =0;
      private int k = 1;
      public static void main(String args[])
      {
        Apple apple = new Apple();
        apple.InBox(1);
        System.out.println("共需裝"+apple.GetBoxVec().size()+"箱");
        for (int i=0;i<apple.GetBoxVec().size();i++)
        {
          Box box = (Box)apple.GetBoxVec().get(i);
          System.out.println("第 ‘"+box.getCode()+"’ 箱裝'"+box.getApplenum()+"' ");
        }
        apple.GetApple(xqs,apple.GetBoxVec());
      }

      public void GetApple(int x,java.util.Vector vec)
      {
        if (x==1)
        {
         System.out.println("拿第一箱玩去,就1個");
        }
        else
        {
          if (x != 0) {
            int key = 0;
            for (int i = 0; i < vec.size() - 1; i++) {
              Box xbox = (Box) vec.get(i);
              Box ybox = (Box) vec.get(i + 1);
              if (x > xbox.getLimit() && x <= ybox.getLimit()) {
                key = i + 2;
                System.out.println("拿第" + ybox.getCode() + "箱給他,共" +
                                   ybox.getApplenum() + "個");
                GetApple(x - ybox.getApplenum(), vec);
              }
            }
          }
          else
            System.out.println("完成");
        }

      }

      public void InBox(int i)
      {
        if ((i+i)>=max)
        {
          Box box = new Box(k,max-ai,max);
          Boxvec.add(box);
        }
        else
        {
          Box box = new Box(k,i,i+ai);
          k++;
          Boxvec.add(box);
          ai = ai + i;
          InBox(i+i);
        }
      }
      public java.util.Vector GetBoxVec()
      {
        return Boxvec;
      }

    }

    posted @ 2005-10-12 13:52 鋒出磨礪 閱讀(2119) | 評論 (8)編輯 收藏

    最近在做Java Application的項目,對于ui的美觀,做了一些嘗試。有幸看到了JGoodIdes的LookAndFeel包。
    效果大家可以看看如下連接
            http://www.jgoodies.com
    經過試驗,解決了中文亂碼問題,下面將經驗和大家共分享。
    LookAndFeel如同css一樣,具體的概念大家可以參考其他文章,這里不做贅述。

    http://www.tkk7.com/Files/itaogo/plastic-1.1.3.zip
    1,加載附件plastic-1.1.3.jar到lib path,我用的是jbuilderX
    2,創建一個新類AppFont.java
       import java.awt.*;
       import javax.swing.UIManager;
       public class AppFont()
       {
         public static void setFont(Font pFont){
          UIManager.put("Button.font", pFont);
          UIManager.put("ToggleButton.font", pFont);
          UIManager.put("RadioButton.font", pFont);
          UIManager.put("CheckBox.font", pFont);
          UIManager.put("ColorChooser.font", pFont);
          UIManager.put("ToggleButton.font", pFont);
          UIManager.put("ComboBox.font", pFont);
          UIManager.put("ComboBoxItem.font", pFont);
          UIManager.put("InternalFrame.titleFont", pFont);
          UIManager.put("Label.font", pFont);
          UIManager.put("List.font", pFont);
        UIManager.put("MenuBar.font", pFont);
        UIManager.put("Menu.font", pFont);
        UIManager.put("MenuItem.font", pFont);
        UIManager.put("RadioButtonMenuItem.font", pFont);
        UIManager.put("CheckBoxMenuItem.font", pFont);
        UIManager.put("PopupMenu.font", pFont);
        UIManager.put("OptionPane.font", pFont);
        UIManager.put("Panel.font", pFont);
        UIManager.put("ProgressBar.font", pFont);
        UIManager.put("ScrollPane.font", pFont);
        UIManager.put("Viewport", pFont);
        UIManager.put("TabbedPane.font", pFont);
        UIManager.put("TableHeader.font", pFont);
        UIManager.put("Table.font", pFont);
        UIManager.put("TextField.font", pFont);
        UIManager.put("PasswordFiled.font", pFont);
        UIManager.put("TextArea.font", pFont);
        UIManager.put("TextPane.font", pFont);
        UIManager.put("EditorPane.font", pFont);
        UIManager.put("TitledBorder.font", pFont);
        UIManager.put("ToolBar.font", pFont);
        UIManager.put("ToolTip.font", pFont);
        UIManager.put("Tree.font", pFont);
          }
       }
    3,尋找您的java application 的主程序 
     
      //引入
      import com.jgoodies.plaf.LookUtils;
      import com.jgoodies.plaf.plastic.PlasticLookAndFeel;
     
      //修改程序如下
      //Main method
       public static void main(String[] args) {
        try {
          //原來的,請注釋掉;jbuilder是如此寫法。
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
          //修改為
          UIManager.put("ClassLoader", LookUtils.class.getClassLoader());
          UIManager.setLookAndFeel(new PlasticLookAndFeel());
          AppFont.setFont(new java.awt.Font("宋體", 0, 12));
        }
        catch(Exception e) {
          e.printStackTrace();
        }
        new MainApp();
      }
     
     4,附件2 UISample.rar是jbuilder的一個簡單效果的項目。下載地址 http://www.tkk7.com/Files/itaogo/UISample.rar

    posted @ 2005-10-09 10:50 鋒出磨礪 閱讀(934) | 評論 (0)編輯 收藏

    一人在辦公室老是放響屁,同事忍不住說:你能不能不出聲?然后便見他坐在那搖來晃去抖個不停,問:干什么?
    回答說:我調成振動的了

    食人族父子打獵,其子擒一瘦子,其父曰:放,沒肉!其子又擒一胖子,其父曰:放,太膩!其子又擒一美女,
    其父曰:帶回家,晚上把你媽吃了!

    某國有一年經濟危機,失業率特別高,有一個人找工作找了很久也沒有找到。
    這天他在街上轉悠,經過一個建筑工地時,忽然發現有一個工人從在建的樓上摔了下來。
    他急忙跑向工頭那兒問:“那個剛掉下來的人的工作我可以接替嗎?”
    工頭說:“不行,他的工作已經有人接替了。”
    “誰呀?”
    “就是把他推下來的那個人唄!”

    一青年做事總是毛手毛腳,所以老是失業。這一次,他又找到一份工作,是替一家古董店干活。
    才上班的第一天,他就不小必把店里的一只較昂貴的玻璃瓶給摔碎了。
    老板很生氣:“這只瓶子的價錢我會在你每個月的工資內扣。”
    這青年一聽,松了口氣說:“謝天謝地,我終于找到了一份比較長的工作。”

    某人向朋友傾訴:“有兩次我下班回家,看見太太和一個男人摟抱,你說我該怎么辦?”
    “我不知道,”朋友回答,“但你何不試試加班工作?”

    安妮從幼兒園回家,對媽媽說:“媽媽,捷克向我求婚!”
    媽媽問:“他有固定的工作嗎?” 安妮說:“他是我們班專職擦黑板的!”

    有一個小姐到鄉去旅行時,看到一個小男孩滿身是汗地拉著一頭牛。 
    小姐:“你要把牛牽到那里去?”
    男孩:“到隔壁村去和母牛配種。”
    小姐:“難道這工作不能叫你父親做嗎?”
    男孩:“不行!一定得公牛才行!”

    某單位有專門的制服,但工作人員平時都不大穿。單位領導經過研究,決定工作人員在上班時間必須穿制服。
    這可苦了那些愛美的女職員,開始幾天還勉強可以,幾天過后,牛仔褲、健美褲又風行起來。當然,因為有
    所顧忌,上裝還是裝制服。單位領導見此情況,立即召開大會。會上,領導人氣惱地說道:“現在,老毛病
    又犯了,有些女同志上班只穿上裝,不穿褲子。。。。。”

    一天律師和他妻子走在大街上,迎面走來一個打扮十分妖嬈的女郎并頻頻向律師放電,而且在碰面的時候還熱情的和律師打招呼。
    “你認識她?”妻子問。
    “哦,我們只是在工作上的來往。”
    “你的工作還是她的工作?”

    posted @ 2005-10-06 12:07 鋒出磨礪 閱讀(302) | 評論 (0)編輯 收藏

    自從《設計模式》問世以來,模式就開始流行,有分析模式、設計模式、開發模式等等。在業界比較風靡的是設計模式,就是將以前用到的設計進行抽取公用之后得到的設計方案,稱其設計模式,即模子。我們從以前做過得項目中也可以抽取一些比較通用的業務管理,不妨稱其為業務模式,比如角色權限管理,機構管理,系統管理(數據庫備份,恢復),消息管理,還有電力設備臺帳,安全事故(設備,人員,車輛)等等。我將其分為兩部分(通用業務模式,電力業務模式),下面將詳細的介紹這些業務模式的業務分析和設計(類設計,數據庫設計)。

    通用業務模式

    l         角色權限管理

    角色對應權限,兩者是多對多的關系。

    例如:

    人力資源管理角色所擁有的操作權限有

    l         機構管理

    l         系統管理

    l         消息管理

    l         生成菜單管理

    電力業務模式(電廠,省公司,網公司,電力國、省、地方調度,市局,縣局,電管所)

    l         電力設備臺帳

    l         安全事故

    l         設備大修檢修

    posted @ 2005-10-04 17:52 鋒出磨礪 閱讀(489) | 評論 (0)編輯 收藏

    架構設計說明書

    參考文件《需求說明書》

     

    需要考慮的要素

     

    1、需求的符合性:正確性、完整性;功能性需求、非功能性需求

    軟件項目最主要的目標是滿足客戶需求。在進行構架設計的時候,大家考慮更多的是使用哪個運行平臺、編成語言、開發環境、數據庫管理系統等問題,對于和客戶需求相關的問題考慮不足、不夠系統。如果無論怎么好的構架都無法滿足客戶明確的某個功能性需求或非功能性需求,就應該與客戶協調在項目范圍和需求規格說明書中刪除這一需求。否則,架構設計應以滿足客戶所有明確需求為最基本目標,盡量滿足其隱含的需求。(客戶的非功能性需求可能包括接口、系統安全性、可靠性、移植性、擴展性等等,在其他小節中細述)

    一般來說,功能需求決定業務構架、非功能需求決定技術構架,變化案例決定構架的范圍。需求方面的知識告訴我們,功能需求定義了軟件能夠做些什么。我們需要根據業務上的需求來設計業務構架,以使得未來的軟件能夠滿足客戶的需要。非功能需求定義了一些性能、效率上的一些約束、規則。而我們的技術構架要能夠滿足這些約束和規則。變化案例是對未來可能發生的變化的一個估計,結合功能需求和非功能需求,我們就可以確定一個需求的范圍,進而確定一個構架的范圍。(此段From林星)

    這里講一個前幾年因客戶某些需求錯誤造成構架設計問題而引起系統性能和可靠性問題的小小的例子:此系統的需求本身是比較簡單的,就是將某城市的某業務的全部歷史檔案卡片掃描存儲起來,以便可以按照姓名進行查詢。需求階段客戶說卡片大約有20萬張,需求調研者出于對客戶的信任沒有對數據的總量進行查證。由于是中小型數據量,并且今后數據不會增加,經過計算20萬張卡片總體容量之后,決定使用一種可以單機使用也可以聯網的中小型數據庫管理系統。等到系統完成開始錄入數據時,才發現數據至少有60萬,這樣使用那種中小型數據庫管理系統不但會造成系統性能的問題,而且其可靠性是非常脆弱的,不得不對系統進行重新設計。從這個小小的教訓可以看出,需求階段不僅對客戶的功能需求要調查清楚,對于一些隱含非功能需求的一些數據也應當調查清楚,并作為構架設計的依據。

    對于功能需求的正確性,在構架設計文檔中可能不好驗證(需要人工、費力)。對于功能需求完整性,就應當使用需求功能與對應模塊對照表來跟蹤追溯。對于非功能需求正確性和完整性,可以使用需求非功能與對應設計策略對照表來跟蹤追溯評估。

    軟件設計工作只有基于用戶需求,立足于可行的技術才有可能成功。

    2
    、總體性能

    性能其實也是客戶需求的一部分,當然可能是明確的,也有很多是隱含的,這里把它單獨列出來在說明一次。性能是設計方案的重要標準,性能應考慮的不是單臺客戶端的性能,而是應該考慮系統總的綜合性能;

    性能設計應從以下幾個方面考慮:內存管理、數據庫組織和內容、非數據庫信息、任務并行性、網絡多人操作、關鍵算法、與網絡、硬件和其他系統接口對性能的影響;

    幾點提示:算法優化及負載均衡是性能優化的方向。經常要調用的模塊要特別注意優化。占用內存較多的變量在不用時要及時清理掉。需要下載的網頁主題文件過大時應當分解為若干部分,讓用戶先把主要部分顯示出來。

    3
    、運行可管理性

    系統的構架設計應當為了使系統可以預測系統故障,防患于未然。現在的系統正逐步向復雜化、大型化發展,單靠一個人或幾個人來管理已顯得力不從心,況且對于某些突發事件的響應,人的反應明顯不夠。因此通過合理的系統構架規劃系統運行資源,便于控制系統運行、監視系統狀態、進行有效的錯誤處理;為了實現上述目標,模塊間通信應當盡可能簡單,同時建立合理詳盡的系統運行日志,系統通過自動審計運行日志,了解系統運行狀態、進行有效的錯誤處理;(運行可管理性與可維護性不同)

    4
    、與其他系統接口兼容性(解釋略)

    5
    、與網絡、硬件接口兼容性及性能(解釋略)

    6
    、系統安全性

    隨著計算機應用的不斷深入和擴大,涉及的部門和信息也越來越多,其中有大量保密信息在網絡上傳輸,所以對系統安全性的考慮已經成為系統設計的關鍵,需要從各個方面和角度加以考慮,來保證數據資料的絕對安全。

    7
    、系統可靠性

    系統的可靠性是現代信息系統應具有的重要特征,由于人們日常的工作對系統依賴程度越來越多,因此系統的必須可靠。系統構架設計可考慮系統的冗余度,盡可能地避免單點故障。系統可靠性是系統在給定的時間間隔及給定的環境條件下,按設計要求,成功地運行程序的概率。成功地運行不僅要保證系統能正確地運行,滿足功能需求,還要求當系統出現意外故障時能夠盡快恢復正常運行,數據不受破壞。

    8
    、業務流程的可調整性

    應當考慮客戶業務流程可能出現的變化,所以在系統構架設計時要盡量排除業務流程的制約,即把流程中的各項業務結點工作作為獨立的對象,設計成獨立的模塊或組件,充分考慮他們與其他各種業務對象模塊或組件的接口,在流程之間通過業務對象模塊的相互調用實現各種業務,這樣,在業務流程發生有限的變化時(每個業務模塊本身的業務邏輯沒有變的情況下),就能夠比較方便地修改系統程序模塊或組件間的調用關系而實現新的需求。如果這種調用關系被設計成存儲在配置庫的數據字典里,則連程序代碼都不用修改,只需修改數據字典里的模塊或組件調用規則即可。

    9
    、業務信息的可調整性

    應當考慮客戶業務信息可能出現的變化,所以在系統構架設計時必須盡可能減少因為業務信息的調整對于代碼模塊的影響范圍。

    10
    、使用方便性

    使用方便性是不須提及的必然的需求,而使用方便性與系統構架是密切相關的。WinCE1.0)的失敗和后來改進版本的成功就說明了這個問題。WinCE1.0)有太多層次的視窗和菜單,而用戶則更喜歡簡單的界面和快捷的操作。失敗了應當及時糾正,但最好不要等到失敗了再來糾正,這樣會浪費巨大的財力物力,所以在系統構架階段最好能將需要考慮的因素都考慮到。當然使用方便性必須與系統安全性協調平衡統一,使用方便性也必須與業務流程的可調整性和業務信息的可調整性協調平衡統一。滿足用戶的需求,便于用戶使用,同時又使得操作流程盡可能簡單。這就是設計之本。

    11
    、構架樣式的一致性

    軟件系統的構架樣式有些類似于建筑樣式(如中國式、哥特式、希臘復古式)。軟件構架樣式可分為數據流構架樣式、調用返回構架樣式、獨立組件構架樣式、以數據為中心的構架樣式和虛擬機構架樣式,每一種樣式還可以分為若干子樣式。構架樣式的一致性并不是要求一個軟件系統只能采用一種樣式,就像建筑樣式可以是中西結合的,軟件系統也可以有異質構架樣式(分為局部異質、層次異質、并行異質),即多種樣式的綜合,但這樣的綜合應該考慮其某些方面的一致性和協調性。每一種樣式都有其使用的時機,應當根據系統最強調的質量屬性來選擇。

    四、源代碼的組織結構方面的考慮:

    1
    、開發可管理性

    便于人員分工(模塊獨立性、開發工作的負載均衡、進度安排優化、預防人員流動對開發的影響:一個好的構架同時應有助于減少項目組的壓力和緊張,提高軟件開發效率)、利于配置管理、大小的合理性、適度復雜性;

    1
    )便于人員分工-模塊獨立性、層次性

    模塊獨立性、層次性是為了保證項目開發成員工作之間的相對獨立性,模塊聯結方式應該是縱向而不是橫向, 模塊之間應該是樹狀結構而不是網狀結構或交叉結構,這樣就可以把開發人員之間的通信、模塊開發制約關系減到最少。同時模塊獨立性也比較利于配置管理工作的進行。現在有越來越多的的軟件開發是在異地進行,一個開發組的成員可能在不同城市甚至在不同國家,因此便于異地開發的人員分工與配置管理的源代碼組織結構是非常必要的。

    2
    )便于人員分工-開發工作的負載均衡

    不僅僅是開發出來的軟件系統需要負載均衡,在開發過程中開發小組各成員之間工作任務的負載均衡也是非重要的。所謂工作任務的負載均衡就是通過合理的任務劃分按照開發人員特點進行分配任務,盡量讓項目組中的每個人每段時間都有用武之地。這就需要在構架設計時應當充分考慮項目組手頭的人力資源,在實現客戶需求的基礎上實現開發工作的負載均衡,以提高整體開發效率。

    3
    )便于人員分工-進度安排優化;

    進度安排優化的前提是模塊獨立性并搞清楚模塊開發的先后制約關系。利用工作分解結構對所有程序編碼工作進行分解,得到每一項工作的輸入、輸出、所需資源、持續時間、前期應完成的工作、完成后可以進行的工作。然后預估各模塊需要時間,分析各模塊的并行與串行(順序制約),繪制出網絡圖,找出影響整體進度的關鍵模塊,算出關鍵路徑,最后對網絡圖進行調整,以使進度安排最優化。

    有個家喻戶曉的智力題叫烤肉片策略:約翰遜家戶外有一個可以同時烤兩塊肉片的烤肉架,烤每塊肉片的每一面需要10分鐘,現要烤三塊肉片給饑腸轆轆急不可耐的一家三口。問題是怎樣才能在最短的時間內烤完三片肉。一般的做法花20分鐘先烤完前兩片,再花20分鐘烤完第三片。有一種更好的方法可以節省10分鐘,大家想想。

    4
    )便于人員分工-預防員工人員流動對開發的影響

    人員流動在軟件行業是司空見慣的事情,已經是一個常見的風險。作為對這一風險的有效的防范對策之一,可以在構架設計中考慮到并預防員工人員流動對開發的影響。主要的思路還是在模塊的獨立性上追求高內聚低耦合),組件化是目前流行的趨勢。

    5
    )利于配置管理(獨立性、層次性)

    利于配置管理與利于人員分工有一定的聯系。除了邏輯上的模塊組件要利于人員分工外,物理上的源代碼層次結構、目錄結構、各模塊所處源代碼文件的部署也應當利于人員分工和配置管理。(盡管現在配置管理工具有較強大的功能,但一個清楚的源碼分割和模塊分割是非常有好處的)。

    6
    )大小的合理性與適度復雜性

    大小的合理性與適度復雜性可以使開發工作的負載均衡,便于進度的安排,也可以使系統在運行時減少不必要的內存資源浪費。對于代碼的可閱讀性和系統的可維護性也有一定的好處。另外,過大的模塊常常是系統分解不充分,而過小的模塊有可能降低模塊的獨立性,造成系統接口的復雜。

    2
    、可維護性

    便于在系統出現故障時及時方便地找到產生故障的原因和源代碼位置,并能方便地進行局部修改、切割;(可維護性與運行可管理性不同)

    3
    、可擴充性:系統方案的升級、擴容、擴充性能

    系統在建成后會有一段很長的運行周期,在該周期內,應用在不斷增加,應用的層次在不斷升級,因此采用的構架設計等方案因充分考慮升級、擴容、擴充的可行性和便利

    4
    、可移植性

    不同客戶端、應用服務器、數據庫管理系統:如果潛在的客戶使用的客戶端可能使用不同的操作系統或瀏覽器,其可移植性必須考慮客戶端程序的可移植性,或盡量不使業務邏輯放在客戶端;數據處理的業務邏輯放在數據庫管理系統中會有較好的性能,但如果客戶群中不能確定使用的是同一種數據庫管理系統,則業務邏輯就不能數據庫管理系統中;

    達到可移植性一定要注重標準化和開放性:只有廣泛采用遵循國際標準,開發出開放性強的產品,才可以保證各種類型的系統的充分互聯,從而使產品更具有市場競爭力,也為未來的系統移植和升級擴展提供了基礎。

    5
    、需求的符合性

    從源代碼的組織結構看需求的符合型主要考慮針對用戶需求可能的變化的軟件代碼及構架的最小冗余(同時又要使得系統具有一定的可擴展性)。

    構架工作應該在需求開發完成約80%的時候開始進行,不必等到需求開發全部完成,需要項目經理以具體的判斷來評估此時是否足以開始構建軟件構架。

    給出一致的輪廓:系統概述。一個系統構架需要現有概括的描述,開發人員才能從上千個細節甚至數十個模塊或對象類中建立一致的輪廓。

    構架的目標應該能夠清楚說明系統概念,構架應盡可能簡化,最好的構架文件應該簡單、簡短,清晰而不雜亂,解決方案自然。

    構架應單先定義上層的主要子系統,應該描述各子系統的任務,并提供每個子系統中各模塊或對象類的的初步列表。

    構架應該描述不同子系統間相互通信的方式,而一個良好的構架應該將子系統間的通信關系降到最低。

    成功構架的一個重要特色,在于標明最可能變更的領域,應當列出程序中最可能變更的部分,說明構架的其他部分如何應變。

    復用分析、外購:縮短軟件開發周期、降低成本的有效方案未必是自行開發軟件,可以對現有軟件進行復用或進行外購。應考慮其對構架的影響。

    除了系統組織的問題,構架應重點考慮對于細節全面影響的設計決策,深入這些決策領域:外部軟件接口(兼容性、通信方式、傳遞數據結構)、用戶接口(用戶接口和系統層次劃分)、數據庫組織和內容、非數據庫信息、關鍵算法、內存管理(配置策略)、并行性、安全性、可移植性、網絡多人操作、錯誤處理。

    要保證需求的可追蹤性,即保證每個需求功能都有相應模塊去實現。

    構架不能只依據靜態的系統目標來設計,也應當考慮動態的開發過程,如人力資源的情況,進度要求的情況,開發環境的滿足情況。構架必須支持階段性規劃,應該能夠提供階段性規劃中如何開發與完成的方式。不應該依賴無法獨立運行的子系統構架。將系統各部分的、依賴關系找出來,形成一套開發計劃。

     

    系統概述

     

    名詞解釋

     

     

    業務構架

        模塊定義   模塊獨立性、層次性  

    穩定的需求

    不穩定需求

    不穩定需求造成的后果

    應對方案

    使用方便性

    技術構架

         運行平臺、接口、系統安全性、可靠性、移植性、擴展性

    人力組織計劃

          人力資源分析

          進度安排優化

         開發工作的負載均衡

          預防員工人員流動對開發的影響應對

         

    posted @ 2005-10-04 17:49 鋒出磨礪 閱讀(1930) | 評論 (0)編輯 收藏

        05國慶,陰雨連連,待到雨停。因辦了旅游年卡,長假唯有青龍寺可去,陪內人去覽。
        記憶深刻的是《樂游園》一詩。

        樂游園.
         李商隱.
         向晚意不適,. 驅車登古原。 夕陽無限好,只是近黃昏。

         如今四處高樓林立,雖登高此處,始終無前人的感懷。始終讓人感了沒有了我中華大文化,在倭國的小文化
         籠罩下,處處櫻花,這里那里都是日文。看了相關介紹,明明是日本人是徒弟來學我中華。怎么就讓倭國人
         用金錢改變了味道呢。失敗。
        

    posted @ 2005-10-04 17:44 鋒出磨礪 閱讀(463) | 評論 (2)編輯 收藏

    svg背景

    svg描述

    什么是SVG

    SVG,是可任意放縮矢量圖像格式(Scalable Vector Graphics)的簡稱。它基于XML(可擴展標識語言),是一個全新的標準開放的矢量圖像和動畫格式。SVG不同于傳統的二元(平面)圖像和動畫制作,它使用簡單的一元(文本)語句,完成矢量圖像,以及諸如色彩變化,對象運動,濾鏡和遮照,音效添加等各式動畫效果。SVG創造一個利用純文本完成網絡多媒體的神話。

    SVG的特點

        矢量圖像

      圖像通常分為矢量圖像和位圖圖像。
      矢量圖像利用點和線等矢量化的數據描述圖像,并在圖形中包含色彩和位置信息。矢量圖像的最大優點是"分辨率獨立"。當顯示或輸出圖像時,圖像的品質不受設備的分辨率影響,能夠提供高清晰的畫面。矢量圖相對位圖而言,更適合用于直接打印、印刷或輸出到一些小型設備如手提裝置上。放大和縮小矢量圖不會影響圖像品質。
    而位圖圖像則使用我們稱為像素的一格一格的小點來描述圖像。計算機的屏幕其實就是一張包含大量像素點的網格。位圖圖像受到分辨率的影響。因此常常出現圖像邊緣鋸齒和放大后"馬賽克"現象。相對而言,位圖需要的存儲空間要比矢量圖更多。
      SVG作為矢量圖像格式,同樣具備了矢量圖的諸多優點,更適合在網絡中傳輸和應用。SVG除了矢量圖的優勢,也同樣保持了對位圖圖像的正確表達功能。使用XML中的XLINK(擴展鏈接)標簽,SVG也可以在圖像中調用位圖圖像。

      矢量濾鏡

      雖然SVG圖像做為矢量圖格式,具有很多優點。但我們也看到,仍然有很多的圖像設計師傾向于使用位圖創作。這是因為位圖常常可以使用大量的濾鏡效果、紋理貼圖和空間幻影等,加強圖像的視覺效果。
    但因為位圖的創作是直接針對像素操作,所以,一旦完成效果的添加,設計師幾乎無法再進行修改。例如,輸出一幅霧化效果的位圖圖像,您已經無法再恢復原來清晰的圖像。

      而如果使用SVG支持的矢量濾鏡,設計師同樣可以創作出大量流行的和普遍的濾鏡效果。并且,這樣的濾鏡效果是可調整的。因為SVG的矢量濾鏡并不直接針對像素進行操作,而是作為某一個對象的獨立屬性保存在文件中。修改圖像效果只需要重新調整這些屬性,就可以完成對濾鏡的修改、替換和刪除,非常的便捷。SVG的矢量濾鏡對于遠程協作和二次編輯,提供了極大的自由度。

      關于濾鏡的實例,請參看<<SVG中文教程>>

      基于
    XML

      SVG的語法和結構基于XML(可擴展標識語言)。XML是下一代的網絡開發語言,它提供的功能遠遠超過了目前使用的HTML(超文本鏈接語言)。當一個網站變得越來越復雜的同時,為了獲得更好的管理和交互,網站開發者同樣需要一個比HTML更優秀的網絡開發語言和工具。這就是XML

      與HTML不同,XML完全分離了網站內容和網站構架。通過定義結構數據類型,用戶端應用程序能夠顯示和處理,而不僅僅像HTML那樣僅僅能顯示,網頁或數據。例如,一個利用XML標簽定義的電話號碼,可以根據需要,由瀏覽器進行撥號。XML所具有優秀的擴展性,使得它在網絡工業應用上,比HTML有著更大的空間和前景。
    SVG
    的開發和創作是基于XML的,因此,我們也能在SVG中開發出更多新的功能以提供更多的網絡服務。例如,制作智能化的數據圖像。圖像中的數據可以根據需要,由應用程序讀取、修改和統計并最終在圖像中顯示。這些應用是目前HTML及相關圖像技術遠不可及的。

      文本格式

      SVG文件是一元(文本)格式的。SVG圖像和動畫具有了以下文本格式所具備的特點:
      1、作為基于文本的格式,SVG圖像中的文字也是文本格式。這不同于現在圖像和動畫中的文字。目前圖像和動畫中的文字實質上都是圖像。因此,SVG中的文字可以被網絡搜索引擎做為關鍵詞搜尋。利用這一性質,通過SVG中定義的文字,就可以制作出非常高效的圖像搜索引擎。圖像中的文字也可以被用戶瀏覽器查找。
      2SVG圖像可以方便的由程序語言來動態的生成。例如使用JavaScript,perl,Java等語言,開發自動圖像和動畫生成系統。這對于一些數據庫制表是非常實用的。在線圖像還可以根據后臺數據庫中的關系量實時的進行動態改變。
      3SVG完全支持DOM(文檔物件模型)。因而SVG以及SVG中的對象可以通過腳本語言接受外部事件的驅動,例如鼠標動作、鍵盤動作等,實現對自身或對其他物件、圖像的控制,制作交互式的圖像和動畫。

      4、因為是文本格式,SVG可以很好的跨平臺工作,同時,還可以解決相關的外部輸出、色彩模式、網絡帶寬等問題。

      簡言之,文本格式使得SVG獲得了與其它技術標準更大的交互和融合的特點。


      與GIFJPEG比較

      GIFJPEG都是目前網絡普遍使用的位圖格式。SVGGIFJPEG有很多獨特的優勢:
      1、具有很高的圖像品質。因為是矢量圖像,分辨率獨立,用戶可以自由的放縮圖像而不會破壞圖像的清晰度。這對于查看某些圖像細節例如數據圖像中的數字,非常的有用。
      2、圖像中的文字獨立。如上一小節所述,SVG圖像中的文字獨立于圖像,可以進行文本編輯和查詢。
      3、較小文件尺寸。因為基于矢量格式,由語句完成圖像的保存,SVG圖像相比較GIFJPEG具有更小的文件大小,下載更加迅速。
      4、色彩適應性更強。SVG圖像具有一個1600萬色彩的調色板,支持ICC(國際色彩協會)色彩標準,支持RGB色彩模式。

      5、可交互性。SVG基于XML,因而能輕易的制作強大的動態交互。SVG圖像能對用戶動作做出不同響應,例如高亮,聲效,特效,動畫等,體現了網絡互動的本質。而GIFJPEG都不可以產生交互。


      與SWF比較

      SWF文件格式是Flash的輸出文件格式。從某種意義上,SWFSVG有很多驚人的相似之處。但是,盡管Flash憑借其優越的表現形式和便利的創作工具成為目前網絡動畫設計的首選,SWF日益在網絡中普及,但我們也應該看到,與SVG相比較,SWF存在著以下的不足:
      1SWF是一個非開放標準。這就意味著該技術掌握在個體手中,技術的發展受到方方面面的限制。同時,SWF與其他的開放標準也沒有完整的融合方案。盡管SWF目前已經提供了對XML的支持,但這種支持是單方面的。隨著XML及其他開放標準的發展,SWF的不協調性將日益顯著。
      2SWF的可編輯性不如SVGSWF做為最終的動畫生成格式,其創作過程封裝在SWF文件中,幾乎無法再進行二次編輯。同時,SWF也不提供對文本格式的支持,因此,無法獲得類似SVG的查詢圖像中文字的功能。

     

    svg工具分析

    SVG創作工具

        目前的SVG創作工具還處于開發和研制階段,仍然沒有一款非常成熟的包含靜態,動態,交互功能創作的軟件.這里介紹幾個目前可以進行一些研究和測試的SVG創作軟件.

      Adobe Illustator

      AdobeSVG的開發中扮演了重要角色.Adobe Illustrator 9.0是較早的一款結合SVG功能的矢量創作軟件.目前可以進行靜態圖形的創作和部分交互功能的實現.其交互功能需要手寫javascript腳本.

      創作AI圖像后,選擇File->Export(文件->輸出),選擇文件類型SVG,SVG Option面板中設置相關屬性,可以輸出SVG文件,關于屬性設置,請參看<<SVG中文教程>>.

      Web Draw

        WebDrawJasc Software按照W3C組織制定的SVG規范書開發的矢量圖像和動畫制作工具,專業應用于SVG創作.WebDraw通過直接畫布拖拽繪圖以及濾鏡效果模塊化組合,可以避免手寫源代碼.同時提供源代碼視圖窗口,支持后續源代碼編輯和修改.
      軟件的整體布局類似于目前許多的圖形創作軟件.與職業的矢量創作軟件Adobe IllustratorCorel Draw相比較,Web Draw在功能上還不足以抗衡,但作為專業開發SVG的創作工具,也許可以預想,經過一段時間的積累,它將成為下一個成功的Fireworks.(Fireworks成功的開發了PNG格式
    .)
      最新版本是Preview Release 4.目前還不支持動態SVG效果.另外, 應用濾鏡效果并不能在畫布真實表達輸出后的SVG圖像
    .
      下載
    (4.45M):
      http://www.jasc.com/webdraw.asp (國外
    )
      http://www.2svg.com/ (國內)


    Web Engine

    IMS Web Engine (Interactive Multimedia System)Virtural Mechanics開發的一款網頁創作軟件,主要應用于創作靜態和動態的HTML,DHTMLSVG頁面.Web Engine是目前極少數不需要通過手寫代碼即可完成SVG動態交互創作的工具.它的精靈向導可以很快的定義簡單的交互動作.
      Web Engine的界面比較粗曠,或者說不是很精細,很多操作是雙擊對象彈出面板,調整選項,這有點像當時的Flash3.04.0.Web Engine有一個比較不足的地方,給設計者帶來很大的限制,就是沒有提供源代碼視圖,無法直接進行源代碼的修改和編輯
    .
      目前的版本是
    Version 2 Beta.
      下載
    (3.86M):
      http://www.virtualmechanics.com/(國外
    )
      http://www.2svg.com/ (國內)

     

    市場分析

    SVG的應用價值

        網絡發展的需要,與其他開放標準兼容

      如同PNG作為W3C的位圖圖像工業標準,SVG是網絡中解決矢量圖像的工業標準.SVG以前,除了Macromedia開發了SWF作為矢量的網絡文件格式,還沒有其他的矢量文件在網絡中應用.因為位圖文件受到本身的很多局限,在圖形印刷和傳輸中,矢量文件有很大的應用價值,所以,必定會有相應的矢量標準得到開發和應用,這就是SVG.
      作為W3C的推薦格式,SVG與現有的其他開放標準有很好的兼容性.這些標準包括DOM1DOM2CSSXMLXPointerXSLTXSLSMILHTMLXHTML.SVG與其他組織的標準化技術也能很好的協調一致,如ICCURIUNICODEsRGBECMAScript/JavaScript
    Java.
      使用SVG并不意味著我們將從此放棄現在的網絡圖像技術如GIFJPEGSWF.相比較這些目前有普遍應用的文件格式,SVG更適合網絡發展的需求,開發和應用SVG意味著獲得一個更優秀的工具和方法
    .

      數據表格,圖像地圖


      在應用領域,SVG可以非常適宜的應用在數據表格和圖像地圖中.SVG的源文件中,通過變量可以很方便的控制需要的圖形生成.這就為網絡圖像數據表格提供了很大的應用前景.一個簡單的例子,現有的asp可以方便的構建動態數據網頁,利用SVG,則可以同樣方便的繪制動態數據圖像,例如數據分析中的柱狀圖和餅狀圖.
      制作圖像地圖同樣是SVG的一大優勢.由于SVG是矢量格式,圖像可以在任何顯示分辨率下獲得同樣的圖像效果,文件放大觀看時也不會有任何的品質損失,因而可以完全可以制作這樣的圖像地圖,其中包含了一個城市所有的地理信息,文件可以根據觀看這不同的需要,對不同的地區進行放大顯示,同時,每一個地理名詞又可以獨立的包含一段文字說明,或者包含相應的地理數據,但用戶需要時,可以通過點擊地理名詞獲得解釋說明.這樣的圖像地圖文件的文件大小也僅僅是K字節級別
    .

      無線設備的需求


      SVG另一個非常誘人的應用前景就是開發無線設備的圖形和動畫.例如目前使用的手機產品,其圖像主要是WBMP.這種格式因為是位圖文件,受到傳輸大小的限制,同時不提供彩色的色彩模式,所以顯得很呆板.而如果利用SVG,只要在無線設備中安裝一個文本解析器,就可以實現對SVG文件的識別和顯示,同時,因為是矢量的文本文件,文件的尺寸不會很大,非常適合無線產品的網絡傳輸.SVG還提供動畫和多媒體編輯功能,所以可以支持二維的平面動畫,支持聲音文件和視頻文件的播放.結合一些其他的技術,例如SMIL(多媒體同步整合語言),就可以實現創建一個非常理想的多媒體無線終端解決方案.


      圖像搜索引擎


      不同于現在的二維圖像,SVG是一個可實現交互和查詢的文件格式.SVG圖像中,信息是一元代碼形式的,是開放形式的.文字獨立于圖形信息.這就為圖像搜索和查詢提供了可能.例如,在一個SVG動畫中,通過搜索某一個關鍵字,就可以在圖像中查詢到對應的信息.而這對于同樣是矢量圖像和動畫格式的SWF就不可能實現.依據SVG的這種交互性,可以創建大型的圖像搜索引擎.

      網頁設計思想的改變


      采用SVG進行網頁設計,是下一代的網頁設計思想.現在的網頁設計,通常是在位圖圖像軟件中繪制好整體頁面圖像,然后進行圖像切割,最后完成頁面的文字編輯.通常這樣的工作是很繁瑣的,進行二次修改也很不簡便.而利用SVG,則可以實現頁面圖形設計和文字編輯的一步完成.如果要進行遠程協作完成網頁設計,也只需要傳輸創作后的頁面文件,而不必將所有的圖像源文件和頁面文件都傳輸.
      因為SVG能夠很好的與HTMLXML兼容,所以,下一代的網頁編輯軟件將開始結合圖像創作功能.許多現在需要通過外部圖像或動畫軟件創作的效果,將可以直接在網頁編輯軟件中完成
    .
      結合SVG創作網頁,將使網頁設計師真正可以""出頁面
    .

       另外,有一些專業的計算機軟件公司開發基于web的圖形化軟件,看到了svg的優勢和前景。但是苦于沒有一個好的創作工具而放棄。這是一個大的市場,筆者一直想開發一個用于軟件公司的產品。

       這個工具一旦誕生,將是世界首家。市場非常廣闊。

    總體目標

    產品目標定義

    產品的目標除了吸收目前市場上產品的優點

    可以用簡單的圖元進行靜態svg的設計創建,同步源碼和展現預覽以外

    增加新的目標是。

    1,  java開發,跨平臺

    2,  工具可以和數據庫交互

    3,  可以定義事件

    4,  增加組件庫

    5,  提供api供其它java軟件項目調用

    市場目標定位

    第一步:面向專業的計算機公司

    第二步:面向廣告公司及更大的客戶群

    產品范圍

    組件設計工具

    可以通過簡單的圖元和已有組件進行新的組件設計,但不涉及事件定義,只是簡單的靜態圖形文件的創建。

    總體設計工具

    可以通過簡單的圖元和已有組件進行總體圖形的設計。可以進行事件腳本設計,可以和后臺數據庫關聯。圖形屬性更加豐富。

    java解析展現工具

    可以在java appJpanel上解析展現svg文件。

    posted @ 2005-10-04 17:27 鋒出磨礪 閱讀(1797) | 評論 (2)編輯 收藏

    喝下苦酒
    品味美茗
    靜聽繞梁
    細彈綠綺
    人生美不過如此

    進入責任的年代
    紛亂的時候
    不知前途
    忙活著找個苦力干
    目標框進狹小的目光里

    心不甘
    別人都忙著跳龍門
    當然也想
    拼了 實現了
    卻有跳入另一個桎梏

    親情 戀情
    怦然心動已過
    心不死
    結婚生子
    離離合合

    在圈內的桎梏里掙扎
    為了好的生活
    思想不是自己的思想
    個性更沒有自己的個性

    到處都有責任的年齡
    忍辱負重

    posted @ 2005-10-02 18:15 鋒出磨礪 閱讀(304) | 評論 (1)編輯 收藏

    生命之舟起航了
    喝母乳的時候
    開始涂抹自己人生的畫卷

    碎碎幼童
    橫不橫 豎不豎
    力道不夠 心胸卻大
    聽不懂繞梁音
    記的住綠綺弦

    長到冠禮
    富貧異 教不同
    體格各異 千篇思想
    任創造發揮
    奠日后根本

    太陽青年
    論不論 師不道
    應試教育 各方壓力
    重壓下題海
    輕松里頹廢

    象牙塔
    玩就玩 學就學
    考試過關 天下太平
    無頂梁本事
    卻大言不慚

    社會熔爐
    常奈何 心郁悶
    談婚論家 養家糊口
    苦苦掙扎中
    努力拼爭里

    到中年
    上有老 下有小
    教育孩子 重蹈覆轍
    奈何在那里
    夢婆也不知

    朽木朽木
    貧與賤 樂與悲
    一捧黃土 半尺方堂
    一輩子過了
    下輩子重來

    posted @ 2005-10-02 18:05 鋒出磨礪 閱讀(258) | 評論 (1)編輯 收藏

    僅列出標題
    共14頁: First 上一頁 6 7 8 9 10 11 12 13 14 下一頁 
    主站蜘蛛池模板: 亚洲人成人77777网站| 亚洲午夜电影一区二区三区| 日本黄色动图免费在线观看| 91亚洲国产成人久久精品网址| 在线a人片天堂免费观看高清| 美女18一级毛片免费看| 婷婷精品国产亚洲AV麻豆不片| 国内外成人免费视频| 免费精品久久天干天干| 亚洲日韩亚洲另类激情文学| 亚洲色欲一区二区三区在线观看 | 99视频免费播放| 亚洲精品无码高潮喷水A片软| 亚洲精品无码专区2| 免费99精品国产自在现线| 一日本道a高清免费播放| 亚洲一级片在线观看| 国产偷国产偷亚洲清高动态图| 无码av免费毛片一区二区| 成人A毛片免费观看网站| 亚洲熟女乱色一区二区三区| 亚洲电影中文字幕| 亚洲中文字幕丝袜制服一区| 色婷婷7777免费视频在线观看 | 免费乱码中文字幕网站| 久久成人国产精品免费软件| igao激情在线视频免费| 亚洲欧洲日本在线观看| 99久久精品国产亚洲| 亚洲人成网站在线观看青青| 成年性生交大片免费看| 777成影片免费观看| 中文字幕不卡高清免费| 黄页免费视频播放在线播放| 国产精品亚洲四区在线观看| 亚洲激情中文字幕| 亚洲av中文无码乱人伦在线r▽ | 69成人免费视频| 最近2019免费中文字幕视频三| 一级做a爱片特黄在线观看免费看| 亚洲精品无码你懂的|