問題タブ [scriptengine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
148 参照

java - 文字列を評価するときの不正解

私のコードは次のようになります:

最初のSOPは期待どおりにfalseを出力しますが、2番目のSOPはtrueを出力します。変数を2つの値と比較すると、正しい結果が得られません。条件の半分が真であっても、それは真になります。これに対する回避策はありますか?提案してください。ありがとう。

0 投票する
1 に答える
1115 参照

java - Java ScriptEngine を使用して複数の評価を同期的に実行する

単一の Java ScriptEngine を使用して複数の評価を同期的に実行する方法は?

例えば

method1 に含まれるもの

sce.eval(code1);

method2 に含まれるもの

sce.eval(code2);

両方のメソッドが同期されている場合、評価は同時に実行されます

0 投票する
1 に答える
233 参照

java - スクリプト エンジンの ExecutorService スレッド間隔ギャップ

zip ファイルからエントリを暗号化し、ファイルとして保存する Java メソッドを次に示します。ファイルの読み書きは問題ないので、2~5行目は関係ありません。問題は以下のとおりです...

ExecutorServiceオブジェクト (es) を使用して、ZipEntry[]配列 (ze) 1by1 から Zip Entry を取得し、それらを一定数のスレッドで同時に実行しました。各スレッドはScriptEngine、ScriptEngine 配列 (se) からのオブジェクトで実装されます。スレッドが実行を終了すると、スクリプト エンジンは別のエントリのために解放されます。問題は、スレッド リソース (エントリ) の最初のバッチであり、エグゼキュータはエントリを均等に分割しません。そのため、単一のエンジンに複数のエントリが送信され、デッドロックが発生します

  1. 前のスレッドから数ミリ秒後にスレッドの実行を遅らせる方法は?

    また

  2. スクリプト エンジンがビジー状態のときにリソースをキューに入れる方法。しかし、私はこれに対する解決策を見ることができません:

コードは次のとおりです。

0 投票する
2 に答える
1250 参照

javascript - JavaScript ScriptEngine 全体を複製

ScriptEngineオブジェクトのバインディングのセット全体をどうにかしてディープ クローンする必要があります。

私が試したこと

  • これまでにCloner ライブラリを使用して Bindings 構造全体を複製しようとしました。プライベート変数を含む正確なコピーが保証されるため、これが機能する場合は素晴らしいでしょう。しかし、これは jvm ヒープの破損につながります (jvm は終了コード -1073740940 でクラッシュするだけです)。クラッシュしないこともありますが、本来のSystem.out.println()動作が停止するなど、奇妙なことが起こります...

  • また、ScriptEngine 内で js コードを使用してオブジェクトのクローンを作成することも検討しました。これにより、それらを NativeObjects として取得し、いくつかの Java マップで管理できます。しかし、私が見つけたすべてのクローン作成方法には欠陥があります。オブジェクトの正確なスナップショットが必要です。たとえば、2 つのオブジェクト a と b のそれぞれに同じオブジェクト c を参照するフィールド (a.fa と b.fb など) が含まれている場合、jQuery.extend()(たとえば) フィールドa.faを使用しb.fbてクローンを作成すると、クローンされた a と b の異なるクローンが参照されます。 c、1 つの同じクローンを参照する代わりに。そして、他の多くのエッジの問題。

  • また、(バインディングだけでなく) Cloner を使用して ScriptEngine 全体のクローンを作成しようとしました。また、(バンドルされた ScriptEngine ラッパーの代わりに) Rhino の js エンジンを使用してスコープ全体のクローンを作成しようとしました。しかし、ヒープの破損の問題は解決しません。

なぜ私はそれをする必要があるのですか

これが必要なのは、ScriptEngine バインディング全体の値を以前のポイントに復元できる必要があるためです。バインディングの正確なスナップショットを作成する必要があります。

このアプリケーションは、js コードが添付されたノード (Java で実装) を使用してステート マシンを実行することで構成される、私の博士研究プロジェクトの一部です。js コードはエンド ユーザーによって入力され、実行時に評価されます。パスを介して最終状態に到達できない場合、アルゴリズムは逆方向に進み、別のパスを見つけようとします。戻るたびに、js エンジンのバインドで発生した可能性のある変更を元に戻す必要があります。


すべてのグローバル変数名は js 評価の前に認識され、オブジェクトです (ユーザーがノードのコードに入力すると、これは (Java 内で) 特定の名前パターンを持つ js オブジェクトに編成されます)。ただし、ユーザーの js コードによって制御されるため、コンテンツは何でもかまいません。

したがって、私の唯一の解決策は、js コードを使用して js オブジェクトを複製することだと思います。

0 投票する
2 に答える
1237 参照

c# - Roslyn VisualBasic.ScriptEngineは、C#で記述されたhostObjectを認識しません

私たちのプロジェクトには、顧客がVisualBasicでスクリプト化できる簡単なビジネスルールを持つ能力が必要です。私たちのメインプログラムはC#で書かれていますが

顧客が実行したいスクリプトは次のようになります(私は可能な限り単純なケースを検討しています)

そこで、CodeプロパティとMappedCodeプロパティを使用してC#でRowDataクラスを作成しました

次のような単純なホストオブジェクトクラスを作成しました

Roslyn.Scripting.VisualBasic.ScriptEngineを使用してエンジンを作成し、HostObjectModelのインスタンスを使用してセッションを作成し、engine.Execute(vbCode、session)を実行します。

そしてそれは私にそれを教えてくれます

(2,25):エラーBC30451:「行」が宣言されていません。保護レベルが原因でアクセスできない場合があります。

しかし、C#で同様のコードスニペットを作成すると

CSharp.ScriptEngineを使用すると、すべて正しく機能します

では、何が問題なのか、なぜVisualBasic.ScriptEngineがC#でコンパイルされたクラスのパブリックプロパティを表示できないのか、同じMSIL言語に基づいているのか、それとも間違っているのでしょうか。


更新:Visual Basicをインストールし、VBにScriptModelライブラリを作成しました。また、クラス宣言とvbCodeの両方でRowプロパティをRow()関数に置き換えました。どちらも役に立たなかった。:( C#から実行すると、VisualBasic.ScriptEngineがまったく機能しないようです。

0 投票する
2 に答える
2985 参照

java - JavaのScriptEngineまたはWebEngineクラスを使用したDOMオブジェクトの呼び出し

JavaのScriptEngineまたはWebEngineクラスを使用してhtml要素を変更することは可能ですか?私は次のことを試しました:

例でこのようなものを見ましたが、うまくいかなかったようです。私もこれを試しました:

これもうまくいきませんでした。ステートメントがWebEngineにリンクされていないためですか?

0 投票する
1 に答える
227 参照

java - 「長い」追加でJava ScriptEngineが失敗しますか?

ScriptEngine を使用して、文字列で指定された計算を実行しています。以下のような簡単なプログラムを試しました。

これは 1340992126976 の出力を与えますが、正しい答えは 1340992172921 です

これは、かなり大きな整数では機能するように見えますが、長い値では失敗します。それらはタイムスタンプであり、そのように使用したいので、長い値として使用したいです。何がこれを機能させることができるかについてのアイデアはありますか?

ありがとう。

0 投票する
1 に答える
2279 参照

java - Java ScriptEngine を使用して Javascript 関数を作成する方法

この質問では、式言語のサポートについて質問し、Javascript のアイデアをうまく​​使用しました。シンプルな式言語を Java に入れる

しかし、必要な Javascript 式は非常に冗長になり、ScriptEngine を使用して式で参照できる JavaScript 関数を作成し、式を短くする方法を見つけようとしています。

これまでのところ、ユーザーが入力した文字列に reexp を使用してソリューションをハックしました。これには、ifempty という疑似関数を含めることができ、スクリプト エンジンに渡す前に JavaScript に変換します。

次のような式を解析できます

しかし、実際のJavaScript関数を実際に作成する適切な解決策について疑問に思っていました。

0 投票する
1 に答える
660 参照

blackberry - ブラックベリーネイティブからJavaScript関数を呼び出す方法は?

ブラックベリーネイティブからjavascriptまでいくつかのメソッドを呼び出す必要があるアプリを開発しています。

バック キー ダウン イベントをクリックすると、javascript で宣言されているonBackKeyDown()メソッドをトリガーしたいと考えています。

Main.java

main.js

}

「extendScriptEngine」を使用することで、javascriptで宣言されたメソッドがネイティブで呼び出されるという考えがあるので。しかし、ここで、上記のコードに従ってネイティブであるjavascriptのメソッドを呼び出す方法...誰でもこれで私を助けてくれます...

0 投票する
1 に答える
415 参照

javascript - Rhino (Java SE 6 ScriptEngine API) を使用して PEG.js 0.7.0 パーサーを構築する方法

PEG.js バージョン 0.6.1 を使用して Maven プラグイン (つまり、Java コードから PEG.js を呼び出す) を使用してパーサーを構築してきましたが、新しいバージョンにアップグレードしようとすると、次のエラー メッセージが表示されて失敗します。

sun.org.mozilla.javascript.internal.EcmaError: SyntaxError: missing ; before statement (#3213(eval)#1) in #3213(eval) at line number 1

デバッグ中に、PEG.buildParser() 関数呼び出しから生成されるパーサーが構文的に間違っているように見えることに気付きましたが、もちろん、ブラウザーから呼び出している間は発生しません。

これが私がそれを呼び出す方法です:

grammarSourceのテストケースでは、はウェブサイトで例として使用される基本的な文法であり、PEGJS_LIB = peg-0.7.0.js.

どんなアイデアでも大歓迎です!私はここでそれらを使い果たしました...