soraなりの日々 - fc2 -

こころにひっかかったもの

[adobe air,jruby]air + java + ruby な夢を見る

近々、adobe air のコミュニティ立ち上げるってんで、
オイラもなんか陰ながら応援できないかな、とか思って
ここ1週間悶えながら四苦八苦してみた。

履歴はココ:
 [adobe air] air で軽く挫折してみた

しかしながら、thread は動きゃないわ、
調べまくっても win32api は呼べないわで
若干、air おもろくねーすっ。」になってたんだけど、
最後のあがきで ruby 呼べないかでがんばってみた。

の記録。

このエントリーをはてなブックマークに追加
で、やったのは、前にやった jruby 経由で
java から chart を作成する jfreechart ってライブラリを
呼んでみたやつで試してみた。

 [ruby,jruby]グラフを作成してみた

画像1:
 jfreechart
 (※ 表示された)

画像2:
 jfreechart02
 (※ こんなんなっとる)

ソース(jruby 側):
require 'java'
import 'org.jfree.chart.ChartFactory'
import 'org.jfree.chart.ChartFrame'
import 'org.jfree.chart.JFreeChart'
import 'org.jfree.data.general.DefaultPieDataset'

require "socket"
require "rexml/document"

def execute_chart(xml)
  doc = REXML::Document.new xml

  d = DefaultPieDataset.new

  doc.elements.each("test_xml/data") do |e|
    d.setValue e.elements["name"].text, e.elements["value"].text.to_i
  end

  c = ChartFactory.createPieChart "pie chart", d, true, true, false
  f = ChartFrame.new "pie chart", c
  f.pack
  f.setVisible true
end

gs = TCPServer.open("localhost", 14000)
addr = gs.addr
addr.shift
printf("server is on %s\n", addr.join(":"))

while true
  Thread.start(gs.accept) do |s|
    str = s.gets
    s.close
    execute_chart(str)
  end
end


ソース(air 側):
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">

    <mx:Script>
        <![CDATA[
            import lib.TestServer;
           
            private function init():void {
            }

            private function executeButtonClickHandler():void {
                var test:TestServer = new TestServer();
                var xml:String = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
                xml += "<test_xml><data><name>カテゴリ1</name><value>15</value></data>";
                xml += "<data><name>カテゴリ2</name><value>35</value></data>";
                xml += "<data><name>カテゴリ3</name><value>55</value></data>";
                xml += "</test_xml>";
                test.send(xml);
            }

        ]]>
    </mx:Script>
    <mx:Button x="10" y="10" label="jfreechart 起動" click="executeButtonClickHandler()"/>

</mx:WindowedApplication>
 (全部載せるのが、めんどくさいんで抜粋)


jruby のソケットんところにまだ改良が必要だけど、
ざくっと解説すると
 ・jruby 側でサーバ立ち上げて監視
 ・air 側で xml のデータをソケットで送信
 ・受け取った jruby 側で データ解析して jfreechart
  に渡して chart を表示
てな具合。

あー、かこわるい・・・orz
アプリ屋からみたら致命的。

とてもデスクトップアプリと言うにはほど遠いですわ。
インストーラ1発でいけないし、サーバ立ち上げとかないと
動作すらしないし。。。

せめて、事前にサーバを立ち上げなきゃいけない手間だけでも
省けないかと、当初 exe を動かせるらしい flash の "fscommand" なるもので
やろうとしたが、調べた結果できんかった。
それに flash が別途いりそう。

なので、今回は諦めました。

ソケット通信じゃないとデータ渡せないとかしゃーないとは
思いますが、なんとか jruby のコマンドなりたたけるように
どげんかなりませんかね。。。adobe さん。
たのんます。


(※ それか、誰か "fscommand" 使ったプロジェクタ作ってー)

ps:
 因にコレを air + jruby(java + ruby) なので jra と名付けたい。
 若干、競馬っぽいけどなー。
このエントリーをはてなブックマークに追加

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://sora2hs.blog70.fc2.com/tb.php/370-083cb6a3
この記事にトラックバックする(FC2ブログユーザー)