作為Visual Studio外掛程式的Flex開發工具,Ensemble公司的Tofino確實很吸引人,包含編譯環境的安裝檔案總共才122M,比起Flex Builder要不少。而且,對於熟悉了VS開發環境的.Net程式員,用這樣的外掛程式來做Flex開發方便了很多。
從官網下載安裝檔案,選擇122M的包含開發編譯環境的安裝包下載。關閉Visual Studio,安裝成功後開啟Visual Studio,正常情況下Flex項目會出現在建立項目的頁面上。建立一個Flex工程,如果你機器的java環境配置不正確,就會跟我一樣,出現Ensemble.Tofino.Plugin.Support.FlexJavaBridgeException: Unexpected java bridge exception的錯誤提示(雖然此時沒有編譯運行工程,但是會檢查出來)。如果編譯運行項目,則會報如下詳細錯誤:
view plaincopy to clipboardprint?
- unexpected exception: Ensemble.Tofino.Plugin.Support.FlexJavaBridgeException: Unexpected java bridge exception.
- Tofino version: 2.2010.1.7
- Microsoft? Visual Studio? 2008 9.0.30729.1 built by: SP
- Using JVM: C:\Program Files\Java\j2re1.4.2_19/bin/client/jvm.dll
- OS: Windows XP (Microsoft Windows NT 5.1.2600 Service Pack 3) ---> System.Runtime.InteropServices.SEHException: 外部組件發生異常。
- 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.EnsureInitialized()
- 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.InvokedUnLockedAction(JavaAction action)
- --- 內部異常堆疊追蹤的結尾 ---
- 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.InvokedUnLockedAction(JavaAction action)
- 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.InvokedLockedAction(JavaAction action)
- 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.StartBuild(String projectDir, LogCallback logCallback, ProgressCallback progressCallback)
- 在 Ensemble.Tofino.Plugin.Compiler.FlexBuilder.Build()
- 在 Ensemble.Tofino.Plugin.Project.FlexProject.InvokeMsBuild(String target) -1 0 FlexApplication1
unexpected exception: Ensemble.Tofino.Plugin.Support.FlexJavaBridgeException: Unexpected java bridge exception.Tofino version: 2.2010.1.7Microsoft? Visual Studio? 2008 9.0.30729.1 built by: SPUsing JVM: C:\Program Files\Java\j2re1.4.2_19/bin/client/jvm.dllOS: Windows XP (Microsoft Windows NT 5.1.2600 Service Pack 3) ---> System.Runtime.InteropServices.SEHException: 外部組件發生異常。 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.EnsureInitialized() 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.InvokedUnLockedAction(JavaAction action) --- 內部異常堆疊追蹤的結尾 --- 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.InvokedUnLockedAction(JavaAction action) 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.InvokedLockedAction(JavaAction action) 在 Ensemble.Tofino.Plugin.Support.FlexJavaBridge.StartBuild(String projectDir, LogCallback logCallback, ProgressCallback progressCallback) 在 Ensemble.Tofino.Plugin.Compiler.FlexBuilder.Build() 在 Ensemble.Tofino.Plugin.Project.FlexProject.InvokeMsBuild(String target)-10FlexApplication1
從上面的錯誤資訊可以看出,是Tofino的dll在配置java環境時出錯,找到這一行:
Using JVM: C:\Program Files\Java\j2re1.4.2_19/bin/client/jvm.dll
取到的是jre的路徑,那麼應該是jre中bin路徑錯誤,需要java.dll所在的目錄,而這裡缺少bin目錄。那Tofino是怎麼取到java環境的路徑呢?我麼來看下Tofino的安裝目錄。
在Tofino安裝目錄下的sdks\3.2.0\bin目錄中,有個jvm.config檔案,開啟找到如下內容:
view plaincopy to clipboardprint?
- #
- # VM configuration
- #
- # Where to find JVM, if {java.home}/jre exists then that JVM is used
- # if not then it must be the path to the JRE itself
- #
- # If no java.home is specified a VM is located by looking in these places in this
- # order:
- #
- # 1) JAVA_HOME environment variables (same rules as java.home above)
- # 2) bin directory for java.dll (windows) or lib/<ARCH>/libjava.so (unix)
- # 3) ../jre
- # 4) registry (windows only)
- #
-
- java.home=
## VM configuration## Where to find JVM, if {java.home}/jre exists then that JVM is used# if not then it must be the path to the JRE itself## If no java.home is specified a VM is located by looking in these places in this# order:## 1) JAVA_HOME environment variables (same rules as java.home above)# 2) bin directory for java.dll (windows) or lib/<ARCH>/libjava.so (unix)# 3) ../jre # 4) registry (windows only)#java.home=
注釋中已經明確說明了,jvm運行環境的檢查先後順序:
1.環境變數中JAVA_HOME指向的位置;
2.java.dll(Windows)或lib/<arch>/libjava.so(unix)的位置;
3.jre的位置;
4.設定檔中指向的位置(windows).
java.home=就可以直接配置jvm的實際位置,即java.dll所在目錄。
查看我的機器上的環境變數,JAVA_HOME指向的jre為安裝目錄的根目錄,應該改為包含bin的目錄。修改JAVE_HOME的路徑,比如C:\Program Files\Java\jre6\bin。重新啟動Visual Studio,編譯運行Flex項目,OK,一切正常!
如果有朋友遇到同樣的報錯資訊,參考以上內容修改即可。祝大家好運!