Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2012 JavaTwo-desktop-appliction-using-j-ruby-w...

tka
August 07, 2012

2012 JavaTwo-desktop-appliction-using-j-ruby-with-swt

tka

August 07, 2012
Tweet

More Decks by tka

Other Decks in Programming

Transcript

  1. Server Simple Web Server 可以在瀏覽器裏面透過 http://127.0.0.1:24681的網址 瀏覽專案內容 Support LiveReload protocol

    當檔案修改之後 , 瀏覽器會自動更新 Ref. • http://livereload.com/ • LiveReload Protocol
  2. 需要 GUI - 1 • Tk • wxRuby • qtRuby

    • Ruby/GTK • Shoes • FXRuby • MacRuby Ruby GUI Library Cross-Platform
  3. 誰需要 JRuby + SWT ? 1. 熟悉 Ruby 想寫 GUIa

    2. 想使用的 Library 只有 Ruby 的版本 3. 很熟 SWT 想改用 Ruby 的語法寫程式
  4. JRuby 中使用 Java 程式 # 使用 Java 的環境 require 'java'

    # 載入指定的 jar 檔 require 'path/to/mycode.jar' # 取得目前的 Java 版號 java.lang.System.getProperties["java.runtime. version"] 更多資料請參考 https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby
  5. Hellow Word! display = org.eclipse.swt.widgets.Display.new shell = org.eclipse.swt.widgets.Shell.new(display) row_layout= org.eclipse.swt.layout.RowLayout.new(org.eclipse.swt.SWT::HO

    RIZONTAL) shell.setLayout( row_layout) label = org.eclipse.swt.widgets.Label.new(shell, org.eclipse.swt.SWT::HORIZONTAL ) label.setText( 'Hello World!' ) shell.open while(!shell.is_disposed) do display.sleep if(!display.read_and_dispatch) end display.dispose
  6. 更加的 Ruby 風格 module Swt import org.eclipse.swt.SWT import org.eclipse.swt.program.Program module

    Widgets import org.eclipse.swt.widgets.Display import org.eclipse.swt.widgets.Label import org.eclipse.swt.widgets.Shell end module Layout import org.eclipse.swt.layout.RowLayout end end
  7. Hello World! 加強版 display = Swt::Widgets::Display.get_current shell = Swt::Widgets::Shell.new(display) shell.layout

    = Swt::Layout::RowLayout.new(Swt::SWT::HORIZONTAL) label = Swt::Widgets::Label.new(shell, Swt::SWT::HORIZONTAL ) label.text = 'Hello World!' shell.open while(!shell.is_disposed) do display.sleep if(!display.read_and_dispatch) end display.dispose
  8. SWT 跨平台問題 SWT_LIB_PATH ="#{LIB_PATH}/swt" if org.jruby.platform.Platform::IS_MAC os="osx" elsif org.jruby.platform.Platform::IS_LINUX os="linux"

    elsif org.jruby.platform.Platform::IS_WINDOWS os="win" end if org.jruby.platform.Platform::ARCH =~ /64/ arch="64" else arch="32" end require "#{SWT_LIB_PATH}/swt_#{os}#{arch}"
  9. 調整啟動速度 1. 不要使用 rubygem 管理 library require "rubygems" 會花上約 0.7

    秒 建議自己將需要的 library 的路徑加到 $LOAD_PATH 中 2. 需要使用時才 require library JRuby require 的成本十分龐大 , 建議要用到的時候才進 行 require 的動作 , 而不是程式一啟動就將需要 library 全部載入 其他技巧還可參考 http://headius.blogspot.com/2010/03/jruby-startup-time-tips.html
  10. 打包程式 使用 Rawr http://github.com/rawr/rawr Rawr 包裝了 launch4j提供 JRuby 程式更加方便的打包方式 安裝

    rawr 到系統 : gem install rawr 建立專案 : rawr install {project_path} 打包 Mac 程式: rake rawr:bundle:app 打包 Windows 程式: rake rawr:bundle:exe
  11. Mac 上隱藏 Dock 的圖示 在 OSX 中使用 SWT 的程式會預設在 Dock

    中顯示 圖示 , 如果想要做出 只顯示在 system tray 上面 的效果 , 需會要修改 Info.plist, 必須在 <dict> 中 添加下列內容 : <key>NSUIElement</key> <string>1</string>