2012-06-29 33 views
12

Java kodundan java script işlevini çağırmaya çalışıyorum. İşte ReferenceError: "alert" tanımlanmadı

benim Java kodu İşte

public static void main(String[] args) throws FileNotFoundException { 
    try { 
     /** 
     * To call a anonymous function from java script file 
     */ 
     ScriptEngine engine = new ScriptEngineManager() 
       .getEngineByName("javascript"); 
     FileReader fr = new FileReader("src/js/MySpec.js"); 
     engine.eval(fr); 

    } catch (ScriptException scrEx) { 
     scrEx.printStackTrace(); 
    } 
} 

olduğunu benim java komut dosyası:

(function() { 
    alert("Hello World !!!"); 
})(); 

Ama sürücü sınıfının ana yöntem çalıştırdığınızda beni aşağıda hata veriyor:

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "alert" is not defined. (<Unknown source>#2) in <Unknown source> at line number 2 
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110) 
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:232) 
at Java6RhinoRunner.load(Java6RhinoRunner.java:42) 
at Java6RhinoRunner.main(Java6RhinoRunner.java:12) 

Bildiğim, onu çalıştırmak için bazı komut dosyası altyapısına gereksinim duyması.

Bunun için sınıf yoluma rhino.jar dosyası ekledim.Ama bu işe yaramıyor.

Bu hatayı nasıl çözemiyorum. Lütfen yardım edin.Teşekkürler.

cevap

27

alert, JavaScript'in bir parçası değildir, web tarayıcıları tarafından sağlanan window nesnesinin bir parçasıdır. Bu nedenle, içinde kullanmaya çalıştığınız bağlamda mevcut değil. (Bu aynı zamanda setInterval, setTimeout ve diğer zamanlayıcı ile ilgili şeyler, FYI için de geçerlidir.)

Yalnızca basit bir konsol yapmak istiyorsanız çıktı, Rhino komut dosyanız için bir print işlevi sağlar, böylece alert'u print ile değiştirebilirsiniz. Komut dosyanızın da tüm Java sınıflarına ve benzerlerine erişimi vardır, bu nedenle, örneğin java.lang.System.out.println('Hello');, JavaScript betiğinizden çalışır (sağlanan print işlevinde biraz fazla olsa da). Ayrıca, ScriptEngine.put aracılığıyla kolayca programcığa Java değişkenleri yapabilir mesela:

engine.put("out", System.out); 

... ve sonra komut:

out.println('Hello from JavaScript'); 

... bu çıktıyı yapmak için üçüncü bir yol yüzden komut dosyasından. :-)

, Bindings (ve SimpleBindings) ve ScriptContext özellikle ScriptEngine#put de, the javax.script package documentation açıklamalara bakın veya daha fazla karmaşık durumlar için.

+1

NodeJS gibi bir şey kullanmak gibi, kod çalıştırabilirsiniz, ancak bir tarayıcıda çalışmadığınızdan, tarayıcı kutuları, uyarı kutuları gibi kullanamazsınız. –

İlgili konular