rhinojava
⑴ java Applet Rhino 安裝後,eclipse起不了。急!!
重裝,或者安裝老版本的試試
⑵ rhino是不是比不過google V8
v8是直接編譯,主要是通過c++編寫的解釋器執行
rhino是基於java runtime之上開發的
語言這玩意,誰離內核最近,誰的效率就越高,所以rhino是比不上v8
但是LZ,mozilla做的Gecko又比谷歌的webkit效率高(具體樓主可以同機不同瀏覽器看渲染實測,明顯的同一個程序webkit會掉幀,在mac上的safari不做參考,那是高度定製的渲染內核了)
⑶ Rhino軟體製作的模型怎麼給unity3d使用
控制角色移動播放動作或者其他邏輯則需要給這個橘色節點綁定邏輯腳本,UNity支持多種腳本語言,在此是用JAVA腳本.
創建 腳本Assets --> Create ----> JavaScript 創建一個空的邏輯腳本,並將這個腳本綁定在主角對象身上,綁定方式是直接拖拽到主角節點即可。
對腳本的編寫:
類及介面主要參照幫助文檔,這里只介紹腳本基本結構和簡單示例:
每個腳本至少都有兩個函數: function Start() 可以認為是初始化 function Updata()則是每幀更新函數。
要實現對角色位置的控制移動首先要定義該角色,
首先 定義GameObject對象也就是要控制的目標: private var _MainRole:GameObject;;
在function Start() 函數中初始化該對象: inRole = GameObject.Find("MainRole"); // 從場景中查找到名叫"MainRole"的對象也就是主角。
在每幀更新時偵聽鍵盤事件,如果按鍵按下W則空對象向前移動
if(Input.GetKey(KeyCode.W))
{
_MainRole.transform.Translate( Vector3.forward * 0.05 );
}
至此,就已經完成按鍵控制角色移動的全部過程,運行游戲就可以用按鍵控制角色移動。
⑷ java,javascript,groovy和Rhino 的運行效率到底相差的有多遠
您好,很高興為您解答。
看下這個測試:http://blog.csdn.net/emu/article/details/424301
如若滿意,請點擊右側【點贊答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望點贊!
~ O(∩_∩)O~
⑸ Rhino 和 Nashorn 到底怎麼運行
嗯這個問題得剝開幾層說。其實很容易理解。這里我們先忽略JVM是用什麼語言實現的。要詳細考察這個問題可以去看另一個回答:Java 平台中的 JVM 和 .Net 平台下的 CLR 分別是用什麼語言寫的? - RednaxelaFX 的回答 ( 語法分析器 Parser ) -> [ 抽象語法樹(AST) ast ] -> ( Rhino內部表現形式生成器 IRFactory ) -> [ Rhino內部表現形式 ScriptNode ] -> ( Rhino位元組碼生成器 CodeGenerator ) -> [ Rhino位元組碼 Icode ] -> ( Rhino解釋器 Interpreter ) -> [ 運行結果 ]這里說的Rhino位元組碼是Rhino內部用來表示JavaScript程序語義的一套位元組碼,跟JVM所支持的Java位元組碼沒關系。當優化級別為0~9時,Rhino使用一個用Java寫的編譯器將JavaScript編譯為Java位元組碼;生成出來的Java位元組碼交由JVM直接執行。至於底下的JVM是解釋執行Java位元組碼,還是將Java位元組碼編譯為機器碼再執行,Rhino並不關心。此時,Rhino的工作流程簡單說是:[ JavaScript源碼 ] -> ( 語法分析器 Parser ) -> [ 抽象語法樹(AST) ast ] -> ( Rhino內部表現形式生成器 IRFactory ) -> [ Rhino內部表現形式 ScriptNode ] -> ( 可選優化 Optimizer ) -> ( Java位元組碼生成器 Codegen ) -> [ Java Class文件(包含Java位元組碼) ] -> JVM載入和執行生成的位元組碼 -> [ 運行結果 ]這種以編譯的方式模式執行JavaScript,跟一個Java源碼編譯器(例如javac)把Java源碼編譯為Class文件然後交由JVM執行,過程是類似的。只不過Rhino做的優化不夠多而且JavaScript的語義也遠比Java動態,所以此時Rhino上運行JavaScript的性能仍然無法跟Java的性能比。順帶一提,Sun/Oracle JDK6 / OpenJDK6中自帶的Rhino是經過裁剪的,去掉了Mozilla Rhino中的部分功能。其中一個被去掉的功能就是Rhino的編譯模式。這意味著JDK6自帶的Rhino只能用解釋模式運行。而Oracle JDK7 / OpenJDK7放寬了這一限制,當有SecurityManager時只能用解釋模式,否則可以配置"rhino.opt.level"系統屬性來設置Rhino的優化級別;默認仍然是用解釋模式(優化級別默認為-1)。pile()開始看:[ JavaScript源碼 ] -> ( 語法分析器 Parser ) -> [ 抽象語法樹(AST) ir ] -> ( 編譯優化 Compiler ) -> [ 優化後的AST + Java Class文件(包含Java位元組碼) ] -> JVM載入和執行生成的位元組碼 -> [ 運行結果 ]中間這個「編譯優化」通過CompilationPhase來組織。最基本的工作流程可以從Compiler.CompilationPhases.COMPILE_ALL來看。它包含一系列CompilationPhase:CONSTANT_FOLDING_PHASELOWERING_PHASETRANSFORM_BUILTINS_PHASESPLITTING_PHASEPROGRAM_POINT_PHASESERIALIZE_SPLIT_PHASESYMBOL_ASSIGNMENT_PHASESCOPE_DEPTH_COMPUTATION_PHASEOPTIMISTIC_TYPE_ASSIGNMENT_PHASELOCAL_VARIABLE_TYPE_CALCULATION_PHASEBYTECODE_GENERATION_PHASEINSTALL_PHASE我在ADC2013做過一次關於Nashorn的演講:博客收集帖Rhino 和 Nashorn 到底怎麼運行
⑹ 為什麼IBM可以推出自家的JDK,java不應該是Oracle的嗎
使用過LINUX的人都應該知道,在大多數LINUX發行版本里,內置或者通過軟體源安裝JDK的話,都是安裝的openjdk,那麼到底什麼是openjdk,它與sun jdk有什麼關系和區別呢?
歷
史上的原因是,openjdk是jdk的開放原始碼版本,以GPL協議的形式放出。在JDK7的時候,openjdk已經成為jdk7的主幹開
發,sun jdk7是在openjdk7的基礎上發布的,其大部分原始碼都相同,只有少部分原始碼被替換掉。使用JRL(JavaResearch
License,Java研究授權協議)發布。
至於openjdk6則更是有其復雜的一面,首先是openjdk6是jdk7的一個分支,並且盡量去除Java SE7的新特性,使其盡量的符合Java6的標准。
關於JDK和OpenJDK的區別,可以歸納為以下幾點:
授權協議的不同:
openjdk採用GPL V2協議放出,而JDK則採用JRL放出。兩者協議雖然都是開放源代碼的,但是在使用上的不同在於GPL
V2允許在商業上使用,而JRL只允許個人研究使用。
OpenJDK不包含Deployment(部署)功能:
部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,這些功能在Openjdk中是找不到的。
OpenJDK源代碼不完整:
這個很容易想到,在採用GPL協議的Openjdk中,sun jdk的一部分源代碼因為產權的問題無法開放openjdk使用,其中最主要的部份就是JMX中的可選元件SNMP部份的代碼。因此這些不能開放的源代碼
將它作成plug,以供OpenJDK編譯時使用,你也可以選擇不要使用plug。而Icedtea則為這些不完整的部分開發了相同功能的源代碼 (OpenJDK6),促使OpenJDK更加完整。
部分源代碼用開源代碼替換:
由於產權的問題,很多產權不是SUN的源代碼被替換成一些功能相同的開源代碼,比如說字體柵格化引擎,使用Free
Type代替。
openjdk只包含最精簡的JDK:
OpenJDK不包含其他的軟體包,比如Rhino Java DB JAXP……,並且可以分離的軟體包也都是盡量的分離,但是這大多數都是自由軟體,你可以自己下載加入。
不能使用Java商標:
這個很容易理解,在安裝openjdk的機器上,輸入「java -version」顯示的是openjdk,但是如果是使用Icedtea補丁的openjdk,顯示的是java。(未驗證)
總之,在Java體系中,還是有很多不自由的成分,源代碼的開發不夠徹底,希望Oracle能夠讓JCP更自由開放一些,這也是所有Java社區所希望的。
⑺ java jdk 可以在 openjdk 運行嗎
使用過LINUX的人都應該知道,在大多數LINUX發行版本里,內置或者通過軟體源安裝JDK的話,都是安裝的openjdk,那麼到底什麼是openjdk,它與sun jdk有什麼關系和區別呢?
歷史上的原因是,openjdk是jdk的開放原始碼版本,以GPL協議的形式放出。在JDK7的時候,openjdk已經成為jdk7的主幹開發,sun jdk7是在openjdk7的基礎上發布的,其大部分原始碼都相同,只有少部分原始碼被替換掉。使用JRL(JavaResearch License,Java研究授權協議)發布。
至於openjdk6則更是有其復雜的一面,首先是openjdk6是jdk7的一個分支,並且盡量去除Java SE7的新特性,使其盡量的符合Java6的標准。
關於JDK和OpenJDK的區別,可以歸納為以下幾點:
授權協議的不同:
openjdk採用GPL V2協議放出,而JDK則採用JRL放出。兩者協議雖然都是開放源代碼的,但是在使用上的不同在於GPL V2允許在商業上使用,而JRL只允許個人研究使用。
OpenJDK不包含Deployment(部署)功能:
部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,這些功能在Openjdk中是找不到的。
OpenJDK源代碼不完整:
這個很容易想到,在採用GPL協議的Openjdk中,sun jdk的一部分源代碼因為產權的問題無法開放openjdk使用,其中最主要的部份就是JMX中的可選元件SNMP部份的代碼。因此這些不能開放的源代碼將它作成plug,以供OpenJDK編譯時使用,你也可以選擇不要使用plug。而Icedtea則為這些不完整的部分開發了相同功能的源代碼(OpenJDK6),促使OpenJDK更加完整。
部分源代碼用開源代碼替換:
由於產權的問題,很多產權不是SUN的源代碼被替換成一些功能相同的開源代碼,比如說字體柵格化引擎,使用Free Type代替。
openjdk只包含最精簡的JDK:
OpenJDK不包含其他的軟體包,比如Rhino Java DB JAXP……,並且可以分離的軟體包也都是盡量的分離,但是這大多數都是自由軟體,你可以自己下載加入。
不能使用Java商標:
這個很容易理解,在安裝openjdk的機器上,輸入「java -version」顯示的是openjdk,但是如果是使用Icedtea補丁的openjdk,顯示的是java。(未驗證)
總之,在Java體系中,還是有很多不自由的成分,源代碼的開發不夠徹底,希望Oracle能夠讓JCP更自由開放一些,這也是所有Java社區所希望的。
⑻ java nashorm怎麼用
從JDK 6開始,Java就已經捆綁了JavaScript引擎,該引擎基於Mozilla的Rhino。該特性允許開發人員將JavaScript代碼嵌入到Java中,甚至從嵌入的JavaScript中調用Java。此外,它還提供了使用jrunscript從命令行運行JavaScript的能力。如果不需要非常好的性能,並且可以接受ECMAScript 3有限的功能集的話,那它相當不錯了。
從JDK 8開始,Nashorn取代Rhino成為Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1規范以及一些擴展。它使用基於JSR 292的新語言特性,其中包含在JDK 7中引入的invokedynamic,將JavaScript編譯成Java位元組碼。
與先前的Rhino實現相比,這帶來了2到10倍的性能提升,雖然它仍然比Chrome和Node.js中的V8引擎要差一些。如果你對實現細節感興趣,那麼可以看看這些來自2013 JVM語言峰會的幻燈片。
相關廠商內容
滴滴出行iOS客戶端架構演進之路!
微信客戶端如何應對弱網路!
函數式編程中的Swift與Swift中的函數式編程!
AWS Webinar 5月24日在線課堂|利用AWS Lambda創建應用
國際范 最前沿 不容錯過的容器技術盛會
相關贊助商
GMTC全球移動技術大會2016年6月24日-25日,北京,點擊了解詳情!
由於Nashorn隨JDK 8而來,它還增加了簡潔的函數式介面支持。接下來,我們很快就會看到更多細節。
讓我們從一個小例子開始。首先,你可能需要安裝JDK 8和NetBeans、IntelliJ IDEA或者Eclipse。對於集成JavaScript開發,它們都至少提供了基本的支持。讓我們創建一個簡單的Java項目,其中包含下面兩個示例文件,並運行它:
(點擊圖片可以查看大圖)
在第12行,我們使用引擎的「eval」方法對任意JavaScript代碼求值。在本示例中,我們只是載入了上面的JavaScript文件並對其求值。你可能會發現那個「print」並不熟悉。它不是JavaScript的內建函數,而是Nashorn提供的,它還提供了其它方便的、在腳本環境中大有用武之地的函數。你也可以將 「hello world」的列印代碼直接嵌入到傳遞給「eval」方法的字元串,但將JavaScript放在它自己的文件中為其開啟了全新的工具世界。
Eclipse目前還沒有對Nashorn提供專門的支持,不過,通過JavaScript開發工具(JSDT)項目,它已經支持JavaScript的基本工具和編輯。
(點擊圖片可以查看大圖)
IntelliJ IDEA 13.1(社區版和旗艦版)提供了出色的JavaScript和Nashorn支持。它有一個全功能的調試器,甚至允許在Java和JavaScript之間保持重構同步,因此舉例來說,如果你重命名一個被JavaScript引用的Java類,或者重命名一個用於Java源代碼中的JavaScript文件,那麼該IDE將跨語言修改相應的引用。
下面是一個例子,展示如何調試從Java調用的JavaScript(請注意,NetBeans也提供了JavaScript調試器,如下截圖所示):
(點擊圖片可以查看大圖)
你可能會說,工具看上去不錯,而且新實現修復了性能以及一致性問題,但我為什麼應該用它呢?一個原因是一般的腳本編寫。有時候,能夠直接插入任何類型的字元串,並任由它被解釋,會很方便。有時候,沒有礙事的編譯器,或者不用為靜態類型擔心,可能也是不錯的。或者,你可能對Node.js編程模型感興趣,它也可以和Java一起使用,在本文的末尾我們會看到。另外,還有個情況不得不提一下,與Java相比,使用JavaScript進行JavaFX開發會快很多。
Shell腳本
Nashorn引擎可以使用jjs命令從命令行調用。你可以不帶任何參數調用它,這會將你帶入一個交互模式,或者你可以傳遞一個希望執行的JavaScript文件名,或者你可以用它作為shell腳本的替代,像這樣:
#!/usr/bin/env jjs
var name = $ARG[0];
print(name ? "Hello, ${name}!" : "Hello, world!");
向jjs傳遞程序參數,需要加「—」前綴。因此舉例來說,你可以這樣調用:
./hello-script.js – Joe
如果沒有「—」前綴,參數會被解釋為文件名。
向Java傳遞數據或者從Java傳出數據
正如上文所說的那樣,你可以從Java代碼直接調用JavaScript;只需獲取一個引擎對象並調用它的「eval」方法。你可以將數據作為字元串顯式傳遞……
ScriptEngineManager scriptEngineManager =
new ScriptEngineManager();
ScriptEngine nashorn =
scriptEngineManager.getEngineByName("nashorn");
String name = "Olli";
nashorn.eval("print('" + name + "')");
……或者你可以在Java中傳遞綁定,它們是可以從JavaScript引擎內部訪問的全局變數:
int valueIn = 10;
SimpleBindings simpleBindings = new SimpleBindings();
simpleBindings.put("globalValue", valueIn);
nashorn.eval("print (globalValue)", simpleBindings);
JavaScript eval的求值結果將會從引擎的「eval」方法返回:
Integer result = (Integer) nashorn.eval("1 + 2");
assert(result == 3);
在Nashorn中使用Java類
前面已經提到,Nashorn最強大的功能之一源於在JavaScript中調用Java類。你不僅能夠訪問類並創建實例,你還可以繼承他們,調用他們的靜態方法,幾乎可以做任何你能在Java中做的事。
作為一個例子,讓我們看下來龍去脈。JavaScript沒有任何語言特性是面向並發的,所有常見的運行時環境都是單線程的,或者至少沒有任何共享狀態。有趣的是,在Nashorn環境中,JavaScript確實可以並發運行,並且有共享狀態,就像在Java中一樣:
// 訪問Java類Thread
var Thread = Java.type("java.lang.Thread");
// 帶有run方法的子類
var MyThread = Java.extend(Thread, {
run: function() {
print("Run in separate thread");
}
});
var th = new MyThread();
th.start();
th.join();
請注意,從Nashorn訪問類的規范做法是使用Java.type,並且可以使用Java.extend擴展一個類。
令人高興的函數式
從各方面來說,隨著JDK 8的發布,Java——至少在某種程度上——已經變成一種函數式語言。開發人員可以在集合上使用高階函數,比如,遍歷所有的元素。高階函數是把另一個函數當作參數的函數,它可以用這個函數參數做些有意義的事情。請看下面Java中高階函數的示例:
List<Integer> list = Arrays.asList(3, 4, 1, 2);
list.forEach(new Consumer() {
@Override
public void accept(Object o) {
System.out.println(o);
}
});
對於這個例子,我們的傳統實現方式是使用一個「外部」循環遍歷元素,但現在,我們沒有那樣做,而是將一個「Consumer」函數傳遞給了「forEach」操作,一個高階的「內部循環」操作會將集合中的每個元素一個一個地傳遞給Consumer的「accept」方法並執行它。
如上所述,對於這樣的高階函數,函數式語言的做法是接收一個函數參數,而不是一個對象。雖然在傳統上講,傳遞函數引用本身超出了Java的范圍,但現在,JDK 8有一些語法糖,使它可以使用Lambda表達式(又稱為「閉包」)來實現那種表示方式。例如:
List<Integer> list = Arrays.asList(3, 4, 1, 2);
list.forEach(el -> System.out.println(el));
在這種情況下,「forEach」的參數是這樣一個函數引用的形式。這是可行的,因為Customer是一個函數式介面(有時稱為「單一抽象方法(Single Abstract Method)」類型或「SAM」)。
那麼,我們為什麼要在討論Nashorn時談論Lambda表達式呢?因為在JavaScript中,開發人員也可以這樣編寫代碼,而在這種情況下,Nashorn可以特別好地縮小Java和JavaScript之間的差距。尤其是,它甚至允許開發人員將純JavaScript函數作為函數式介面(SAM類型)的實現來傳遞。
讓我們來看一些純JavaScript代碼,它們與上述Java代碼實現一樣的功能。注意,在JavaScript中沒有內置的列表類型,只有數組;不過這些數組的大小是動態分配的,而且有與Java列表類似的方法。因此,在這個例子中,我們調用一個JavaScript數組的「for Each」方法:
var jsArray = [4,1,3,2];
jsArray.forEach(function(el) { print(el) } );
⑼ 有人知道java中 rhino怎麼支持javascript的DOM操作嗎~~~~ 非常急啊啊啊啊
DOM是html裡面的DOM。
rhino裡面沒有這個DOM,你操作什麼?
或者說,在rhino裡面,根本沒有dom這個東西,你沒有操作的目標。
⑽ 怎麼使用rhino腳本化java
DOM是html裡面的DOM。 rhino裡面沒有這個DOM,你操作什麼? 或者說,在rhino裡面,根本沒有dom這個東西,你沒有操作的目標。