2013年10月31日 星期四

[Java] 使用ListResourceBundle 出現 MissingResourceException


執行以下程式碼出現MissingResourceException,
"StatsBundle"是ResourceBundle base  name.

ResourceBundle stats = ResourceBundle.getBundle("StatsBundle", currentLocale);


Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name StatsBundle



解法: 使用 fully qualified base name
ResourceBundle stats = ResourceBundle.getBundle("mytest.LocalizationTest.StatsBundle", currentLocale);

2013年10月22日 星期二

[Java筆記] Object Oriented

  • 使用 Annotation "@Override" 標示是個 overriding method,
    若 superclass 不包含同 signature 的 method, 會出現compiler error.
  • Defining a Method with the Same Signature as a Superclass's Method
    Superclass Instance Method Superclass Static Method
    Subclass Instance Method Overrides Generates a compile-time error
    Subclass Static Method Generates a compile-time error Hides
  • Overriding:
    不允許 throw new checked exception,
    但 unchecked exception 可以 (e.g. RuntimeException).
  • Covariant return type:
    the return type of the overriding method is
    a subtype of the return type of the overridden method.
    • e.g.
      class AA
      class A extends AA
      class B extends A
      class C extends B

      class superTest{
          public A method1(){
              return new A();
          }
      }

      class subTest extends superTest{
          public B method1(){ // or public C method1()
              return new C();
          }
      }

  • Method inner class
    • e.g.
      void method1(){
          class A {
              // some implement.
          }
      }
  •  Singleton Pattern
    • Constructor 設為 private
    • Method getInstance() 設為 static 及 synchornized
    • Override method clone()
  • Cohesion: the whole of a class sticks together.
    Coupling: the inter dependency between 2 or more classes.
  • Ideally design: high cohesion and loose coupling.


---

2013年10月7日 星期一

[Design Pattern] Composition vs. Inheritance

  • Inheritance:
    Take advantage of dynamic binding and polymorphism
    • Dynamic binding: 在runtime時, 根據class 決定使用的tethod implemetation.   Polymorphism: 使用 supercalss 保存自身或subclass的references. 
    • Codes易於變換所使用的types. 但superclass的interface不易變換(fragile).
    • Superclass 是 "fragile"(or weak encapsulation). 因為對superclass的修改, 會ripple out至使用到它(or 其subclass)的codes.


  • Composition:  
    Front-end class(原subclass角色)保存back-end class(原supperclass角色)的reference, 不繼承superclass的method, 改採用invoke的方式.
    • 好處是, 對back-end class的修改, 至少影響可止於front-end class(若是inheritance, 會ripple out).

  • Inheritance提供polymorphism, composition易於變更back-end class的interface, 如果想同時採用2者的好處, 可同時使用composition與interface.


Reference:
http://www.artima.com/designtechniques/compoinhP.html

[Java筆記]Concurrency

  • java.util.concurrent.atomic.*
    All classes have get and set methods that work like reads and writes on volatile variables.
 
  • ReentrantLock 在進入 wait state 之前, 會暫時 release the lock.
  • ReentrantLock有2個contructor
    public ReentrantLock()
    public ReentrantLock(boolean fair): the longest waiting thread will get the lock next.
  • ReentrantLock 可視為一種取代傳統的 "wait-notify" 機制.

  • Executor interface:
    傾向使用已存在的 worker threads.
  • Thread pools:
    減少 thread creation 的 overhead.


  • Fork/join framework:
    An implementation of the ExecutorService interface.
    利於使用在 multiple processors 的環境.


  • interface ConcurrentHashMap<K, V>
    extends AbstractMap<K, V>
    implements ConcurrentMap<K, V>, Serializable
  • interface ConcurrentMap<K, V>
    extends Map<K, V>

2013年10月2日 星期三

[開發]使用command line 執行 Sikuli可執行檔 - SKL

我使用的Sikuli是 1.0.1版,
根據Sikuli的文件說明, 是可以使用command line執行SKL檔,
(http://doc.sikuli.org/faq/010-command-line.html)
但在安裝目錄下, 並無"sikuli-ide.exe" 或 "sikuli-ide.bat" 這2個檔案,
因此, 以下使用變通的方式, 採用前版( 1.0 rc3) 程式來執行SKL檔.

下載連結:
http://www.sikuli.org/uploads/1/3/6/8/13689586/sikuli-r930-win32.zip
(http://www.sikuli.org/downloadrc3.html 中的 "Sikuli X r930")

  • 下載後, 解壓縮至另一個資料夾, 如"SikuliX_cmd" .
  •  執行 cmd.exe, 輸入 "資料夾\Sikuli-IDE.bat -r mySikuli.skl" 即可.
如果遇到"系統找不到指定的路徑"的錯誤訊息, 可試著修改"Sikuli-IDE.bat"檔內的JAVA路徑,
如, JAVA_EXE="%PROGRAMFILES(X86)%\Java\jre7\bin\java.exe".

SKL檔的製作方式:
工具列 -> 檔案 -> 匯成.SKL可執行檔

2013年10月1日 星期二

[開發] Sikuli IDE 安裝 - 使用Screenshot寫程式



  • 下載後, 點擊"sikuli-setup.jar" 安裝,
    它會產生安裝所需的"runSetup.cmd". 
  • 執行"runSetup.cmd". (注意需先安裝Java)
    如果出現下圖, 且Java安裝路徑是在"C:\Program Files (x86)", 
    可以修改"runSetup.cmd" 指向正確的Program file 路徑; 
    原本:  
    set PROGRAMS=%ProgramFiles%  
    if defined ProgramFiles(x86) set PROGRAMS32=%ProgramFiles(x86)%
    修改為:
    set PROGRAMS=%ProgramFiles(x86)%   


       
  • 選擇"Pack 1", 安裝Sikuli IDE及執行Sikuli scripts.
  • 按下"Yes"後, 開始安裝.
  • 安裝完成.
  • 執行"runIDE.cmd", 開啟Sikuli IDE.
    ("runIDE.cmd" 的修改可參考前面的"runSetup.cmd")