2017-06-01 77 views
1

我正在嘗試使用Java Scripting API找到已安裝的腳本引擎,但出現問題。Java腳本API無法按名稱檢索引擎

在這個演示程序中,我使用的ScriptEngineManager檢索工廠和列出所有的引擎我。之後,我嘗試按名稱獲取它,但結果爲空。

public class App { 
    public static void main(String[] args) { 
    ScriptEngineManager manager = new ScriptEngineManager(); 
    List<ScriptEngineFactory> factories = manager.getEngineFactories(); 

    for (ScriptEngineFactory factory : factories) { 
     System.out.println("\nName : " + factory.getEngineName()); 
     System.out.println("Version : " + factory.getEngineVersion()); 
     System.out.println("Language name : " + factory.getLanguageName()); 
     System.out.println("Language version : " + factory.getLanguageVersion()); 
     System.out.println("Extensions : " + factory.getExtensions()); 
     System.out.println("Mime types : " + factory.getMimeTypes()); 
     System.out.println("Names : " + factory.getNames()); 
     ScriptEngine engine = manager.getEngineByName(factory.getEngineName()); 
     if (engine == null) { 
      System.out.println("Impossible to find the engine with name " + factory.getEngineName()+"\n"); 
     } 

    } 
    } 
} 

,其結果是:

版本:1.7版本3 PRERELEASE

語言名稱:ECMAScript的

語言版本:1.8

擴展:[JS]

種MIME類型:應用/ JavaScript中,應用/ ECMAScript的,文本/ JavaScript的,文本/ ecmascript]中

名稱:[JS,犀牛,JavaScript中,JavaScript中,ECMAScript中,ecmascript]中

不可能找到發動機用Mozilla的名字犀牛


名稱:Jython的

版本:2.7.0

語言名稱:蟒蛇

語言版本:2.7

擴展:[PY]

MIME類型:文本/蟒蛇,應用/蟒蛇,文本/ X-蟒蛇,應用/ X-蟒蛇]

名稱:蟒,Jython的]

不可能找到名字的Jython發動機

回答

1

檢查的ScriptEngineFactorygetnames()方法的文檔:

返回短名稱的ScriptEngine的,可以ScriptEngineManager使用,以標識ScriptEngine的不可變列表。

就是其中一個名稱必須使用:

... 
System.out.println("Names : " + factory.getNames()); 
ScriptEngine engine = manager.getEngineByName(factory.getNames().get(0)); 
... 
+0

它是第一個引擎** Mozila犀牛工作**而不是爲** **的Jython引擎,使用工廠.getNames()是一個解決方案,其他的確定,我無法理解的是爲什麼它適用於其中一個而不適用於其他應用程序,我應該在我的機器上安裝某些東西(解釋器)以使jython正常工作嗎? –

+0

確實很奇怪,對不起,我沒有/使用Jython - 我不知道它必須如何安裝 –

+0

你可以嘗試通過'getEngineByMimeType(「text/python」)獲取引擎' –