Contenu connexe Similaire à 2012 java two-desktop-appliction-using-j-ruby-with-swt (20) 2012 java two-desktop-appliction-using-j-ruby-with-swt3. 個人簡介
呂旺燊
Twitter: @tkalu
RoR programmer
任職於和多 handlino.com
4. Fire.app
http://fireapp.handlino.com/
17. 需要 GUI - 1
Ruby GUI Library
● Tk
● wxRuby
● qtRuby
Cross-Platform
● Ruby/GTK
● Shoes
● FXRuby
● MacRuby
18. 需要 GUI - 2
Eclipse
Java + SWT
JRuby + SWT
19. 成果
2010.12 推出 Compass.app
2012.04 推出 Fire.app
21. 誰需要 JRuby + SWT ?
1. 熟悉 Ruby 想寫 GUIa
2. 想使用的 Library 只有 Ruby 的版本
3. 很熟 SWT 想改用 Ruby 的語法寫程式
23. 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
24. 載入 SWT
前往 SWT 官網下載檔案後解壓縮後可以取
得 swt.jar 後 , 透過下列兩行程式碼即可
載入 SWT
require "java"
require "download/path/swt"
25. 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
26. 更加的 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
27. 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
28. 其他開發心得
●
SWT 跨平台問題
●
調整啟動速度
●
打包程式
●
Mac 上隱藏 Dock 的圖示
29. 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}"
30. 調整啟動速度
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
31. 打包程式
使用 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
32. Mac 上隱藏 Dock 的圖示
在 OSX 中使用 SWT 的程式會預設在 Dock 中顯示
圖示 , 如果想要做出 只顯示在 system tray 上面
的效果 , 需會要修改 Info.plist, 必須在 <dict> 中
添加下列內容 :
<key>NSUIElement</key>
<string>1</string>
33. 範例程式
請前往下方 Github 網址下載
https://github.com/tka/jruby-rawr-swt-helloworld