[解決済み] ReferenceErrorです。「alert" は定義されていません。
質問
Javaコードからjavaスクリプトの関数を呼び出そうとしています。
以下は私のJavaコードです。
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();
}
}
以下は、私のJavaスクリプトファイルです。
(function() {
alert("Hello World !!!");
})();
しかし、ドライバクラスのmainメソッドを実行すると、以下のようなエラーが発生します。
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)
私が知っているのは、それを実行するために何らかのスクリプトエンジンが必要だということです。
そのために、私はrhino.jarファイルをクラスパスに追加しました。
このエラーを解決する方法がわかりません。 どうか助けてください。
解決方法を教えてください。
alert
はJavaScriptの一部ではなく
window
オブジェクトが提供されています。つまり、あなたが使おうとしているコンテキストには存在しないのです。(これは
setInterval
,
setTimeout
や、その他のタイマーに関するものです、ご参考までに)
単純なコンソール出力を行いたいだけなら、Rhinoは
print
関数に置き換えることができます。
alert
で
print
. スクリプトはすべてのJavaクラスなどにもアクセスできますので、例えば
java.lang.System.out.println('Hello');
を使えば、JavaScriptスクリプトから動作させることができます(ただし、提供されている
print
関数があります)。また、Javaの変数をスクリプトから利用できるようにするために、簡単に
ScriptEngine.put
というように、例えば
engine.put("out", System.out);
...そして、スクリプトの中で
out.println('Hello from JavaScript');
...ということで、スクリプトから出力を行う3つ目の方法です :-)
の議論を参照してください。
その
javax.script
パッケージ・ドキュメント
特に
ScriptEngine#put
または、より複雑なケースに対応します。
Bindings
(そして
SimpleBindings
) と
ScriptContext
.
関連
-
[解決済み】ソースルート外のJavaファイル intelliJ
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] URLを新しいタブで開く(新しいウィンドウではない)
-
[解決済み] JavaScriptで変数が存在するか(定義されているか/初期化されているか)をチェックする
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] Babel 6 regeneratorRuntimeが定義されていません。
-
[解決済み] Node.js上のクライアント。Uncaught ReferenceError: require は定義されていません。
-
[解決済み】JavaScriptで定義されていない変数を確認する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】StringUtils.isBlank() vs String.isEmpty()
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】Javaの未処理例外について
-
[解決済み】Javaの".class expected "について
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している