2010-06-02 72 views
1

這裏框外思考...運行JVM從內MXML組件

可能在努力創造一種可以運行Java Flex組件採取哪些可能的基本方法?

我知道我可以很容易地使用flex來瀏覽或啓動Java應用程序,但有些事情我只能做,如果我可以從一個MXML組件運行Java。我知道這不是不可能的(即:如果你擁有flex和jvm的所有源代碼),但爲此目的,最不切實際的方法是什麼?

編輯: 很多人對原因感興趣爲什麼有人可能想這樣做。我認爲這與其如何做無關,但是這裏有:我擁有超過100個專有的像素讀取窗口程序,我可以用這種方式將它們連接到Mac,比任何其他方式都容易得多。但是,不要爭論這個前提,勝利的答案會忽略原因,並且專注於HOW。

展示您的創意

+0

由於不是AIR2本地進程功能? – 2010-06-02 21:15:57

回答

0

一段時間後我做了這樣的原型。我通過VNC服務器公開了一個窗口/本地應用程序,然後使用開源VNC客戶端庫連接到VNC服務器。這是完全哈克,但它的工作。表現不是很好,但是可用。下面是我用的Flash VNC客戶端庫: http://www.wizhelp.com/flashlight-vnc/index.html

1

這聽起來很瘋狂。我的回答是不要走這條路。有趣的技術挑戰可能是一個有趣的技術挑戰;但是我看不到什麼實際價值。

回答這個問題,你爲什麼要在Flex應用程序中運行JVM?

此外,您將如何使用Flex應用程序瀏覽或啓動Java應用程序?盡我所知,瀏覽器的安全沙箱阻止您啓動其他本地應用程序。

0

我與Flextras,你需要解釋爲什麼之前可以提出合理的解決方案。

不合理的解決方案:

實現AS3的JVM。以字節串的形式讀取罐子。將字節碼傳給你新的jvm。

理由不合理:

  • 實現甚至局部JVM將至少數千個工時工作。在虛擬機內部運行一個虛擬機已經(相對)緩慢的虛擬機就像騎着被烏龜拖走的高爾夫球車:任何一個單獨運行都會更快。
0

您可以航&使用merapi Java應用程序之間的接口(雖然這只是溝通,而不是實際運行中空氣中的API)

1

我不相信對於不能完成某些「只有在可以從MXML組件內運行Java」時才能做到的事情是正確的。通過設置適當的通信,您可以讓Applet和SWF通過一組外部進程簡單地進行通信。

完成此操作的最簡單方法是「僞造」。加載Java Applet(這應該可以通過使用SWF的ExternalInterface API - 生成Object標記並將其添加到swf周圍的HTML中。爲了讓這更加有說服力,使用CSS必須讓Applet出現在「頂部」 ),並通過JavaScript調用與原始swf進行通信。如果這是不可能的,那麼有可能讓Java Applet生成某種形式的僞服務器,然後swf可以與之通信。

如果這兩者都不起作用,那麼總是存在SWF bytearray語法。它需要加載一個ByteArray,處理內部數據,然後發送......不知何故。

+0

RE:我不相信你是否能夠完成你「只能從一個MXML組件內部運行Java才能完成的事情」是正確的。通過設置適當的通信,您可以讓Applet和SWF通過一組外部進程簡單地進行通信。 好吧,我會怎麼說Java對象的bitmapData,因爲我會任何其他Flex組件? var myBitmap:BitmapData = new BitmapData(myTextArea.width, myTextArea.height,true,0x00000000); var m:Matrix = new Matrix(); m.scale(1,1); myBitmap.draw(myTextArea,m); – Joshua 2010-06-08 23:04:59

+0

取決於你有什麼可用的。 Applets能夠將位圖輸出到本地文件系統(或更可能是遠程服務器),然後將新位圖的URL傳遞給Flash。然後Flash可以加載位圖並操作它來完成它的功能。我不知道小程序需要做什麼,但我確信它是可行的。 – cwallenpoole 2010-06-09 13:36:26

+0

但是我沒有Java程序的源代碼或對它們的任何控制。我需要讀取像素的位圖不是java應用程序的bmp資源,而是應用程序gui本身的可視化表示。 – Joshua 2010-06-14 01:34:25