問題タブ [luaj]
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.
lua - LuaJグローバルテーブルの既存のエントリを上書きしないようにする方法
Java で次のように、LuaJ を使用してさまざまな Lua スクリプトをグローバル環境にロードしています。
私の問題は、たとえば、scriptName がたまたま、require、print、error、math、または呼び出し後にグローバルに既に存在するその他の名前である場合です。
、スクリプトは実際には印刷などの実際の機能を置き換え/上書きします。
これを防ぐ簡単な方法はありますか?
残念ながら、次のようなテスト:
スクリプトが更新されたときに、既存のスクリプトを実際にオーバーライドする必要がある場合があるため、私には機能しません。
lua - LuaJ Lua バイトコードの混乱
luaJ を使用して生成された lua バイトコードの解析に問題があります。命令カウントと定数カウントの間に何か問題があります。バイトが足りないようです。LuaJ 2.0.3 を使用しています。
これが私が何を意味するかを示す 16 進ダンプです:
バイトコードは以下を使用して生成されました
定数カウントには 250 個の定数が表示されますが、定数は 1 つだけである必要があります。定数カウントと命令リストの間に 1 バイト以上あれば、完全に機能します
。定数カウントは 1 で、最初の定数 4 (文字列) の型は、文字列の長さが 6 になります。最後にヌル。
なぜそれが機能しないのですか?バイトが欠落しているのはなぜですか?これを修正するにはどうすればよいですか?
java - LuaJ (またはその他の Java LUA インタープリター) - Java から LUA スクリプトが返されるのを待たずに呼び出すことができますか?
私は Android 用の RPG ゲーム エンジンを作成しており、バトル エンジン用のスクリプト言語を追加する必要があると考えるようになりました。私が以前に行ったように、ゲーム コンテンツを駆動する XML 構成を処理するには複雑すぎます。LUA はゲーム開発コミュニティが選んだスクリプト言語のようです。そのため、私はいくつかの調査を行ってきました。エンジンは Java で書かれているので、LuaJ を LUA インタープリターとして使用することを考えています。これはおそらく Java LUA インタープリターがおそらく最良であることを示すいくつかの古いスレッドを見つけたからです。私はすべての耳です。
とにかく、Java から LUA スクリプトを呼び出し、スクリプトが戻るのを待たずにゲーム スレッドの実行を続行できるようにする必要があります。これは、LuaJ または他の一般的な Java ベースのインタープリターで可能ですか? いつでもスクリプト呼び出しを独自のスレッドに配置できることはわかっていますが、一度に多くのスクリプトをアクティブにする可能性があり、とにかく戻り値が必要ないため、無駄です。
java - LuajでLuaモジュールを定義するモジュール機能はサポートされていますか?
私の lua スクリプトでは、次のステートメントで別の lua モジュールが必要です。
「別の」が必要
私の別の lua モジュールでは、コードの最初の行は次のとおりです。
モジュール(..., )
ただし、Luaj には「モジュール」関数が定義されていないか、返されたグローバル オブジェクトでまったくサポートされていないようです。luaj 3.0のbelter 2を使っていますが、luajのモジュール機能に対応していますか?もしそうなら、それをどのように使用しますか?
前もって感謝します!
java - LuaJコルーチンLuaThreadを放棄するにはどうすればよいですか?
私は、プレイヤーがゲーム内のコンピューターでスクリプトを実行できるゲーム メカニクスを試しています。スクリプトの実行は、ゲームプレイ レベルで 1 ティックあたりの命令数にリソースが制限されます。
次の概念実証は、任意のユーザー コードのサンドボックス化とスロットリングの基本レベルを示しています。巧妙に作成されていない「ユーザー入力」の約 250 命令を正常に実行し、コルーチンを破棄します。残念ながら、Java プロセスは決して終了しません。少し調べてLuaThread
みると、コルーチン用に LuaJ によって作成された が永遠にぶら下がっていることがわかります。
SandboxTest.java:
res/test.lua:
res/badfile.lua:
ドキュメントは、再開不可能と見なされるコルーチンがガベージ コレクションされ、OrphanedThread
例外がスローされ、LuaThread
終了することを通知することを示唆していますが、これは決して起こりません。私の質問は2つの部分に分かれています:
- この動作を引き起こすために根本的に間違ったことをしていますか?
- そうでない場合、この状況にどのように対処すればよいですか?
LuaThread
ソースからは、Java でへの参照を取得できれば、interrupt()
. これは良い考えですか?
参考:Lua / Java / LuaJ - 無限ループとスレッドの処理または中断
編集: LuaJ SourceForge にバグ レポートを投稿しました。根本的な問題 (Lua 仕様のようにスレッドがガベージ コレクションされない) について説明し、それを回避するいくつかの方法を提案します。
java - Luaj で Lua-Filesystem と Lua-Penlight をロードする方法
Luaj 3.0 ライブラリを使用するプログラムがあり、含めたい lua スクリプトがいくつか見つかりましたが、それらはすべて lua ファイル システムとペンライトを必要とし、それらのライブラリを使用しようとするとエラーが発生します。
ルアジでそれらをどのように利用するべきか誰か知っていますか?
編集:もう少し情報が役立つかもしれません:open-jdk8 Luaj、lua-filesystem、およびlua-penlightがインストールされたArchlinux 64ビットシステムがあります。プロジェクトに含めたいLua Java Utilsというライブラリのセットを見つけました。ただし、常に次のエラーが発生します。
参考までに24行目:
それにはペンライト ライブラリが必要で、これには lua ファイルシステムが必要になるため、2 つをインストールしました。を実行しようとしても、Lua ファイルシステムがロードされていないことがテストでわかりましたlfs.currentdir()
。試しglobals.load("local lfs = require \"lfs\"").call();
ましたが、エラーも発生しました。
私の Lfs ライブラリは にあり/usr/lib/lua/5.2/lfs.so
、ペンライトは にあり/usr/share/lua/5.2/pl
ます。
libgdx - robovm 0.0.14 NullPointerException の問題
IOS 8 デバイスをサポートするために、libgdx(1.3)、maven、robovm プロジェクトを 0.0.13 から 0.0.14 に移行しました。リリース ノートに従って robovm.xml ファイルを変更し、IOS 8 デバイスで実行できますが、いくつかの場所で NullPointerException が発生します。私が直面した問題を以下に示します。
- 音、音楽、振動が機能しない。
- 次のように luaj NullPointerException を取得しています: (org.luaj.**.* パッケージを robovm.xml にリンクしようとしましたが、何も変更されませんでした)
org.luaj.vm2.LuaError: checkOnSessionEndAchievements:5 vm エラー: java.lang.NullPointerException at org.luaj.vm2.LuaClosure.execute(Unknown Source) at org.luaj.vm2.LuaClosure.call(Unknown Source) at net. games.mobile.game.core.LuaScriptManager.runFunction(LuaScriptManager.java) で net.games.mobile.game.core.achievement.AchievementManager$3.run(AchievementManager.java) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor) .java) で java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java) で java.lang.Thread.run(Thread.java) で
- otto ライブラリの Bus.java "register" メソッドで NullPointerException が発生していましたが、回避策を適用して修正しました。
私が見る限り例外はリフレクションに関連しているため、0.0.14 バージョンのリフレクション動作に関連して何かが変更されたと思います。ちなみに、iOS 7.1 デバイスでも同じ NullPointerException の問題が発生しますが、「音、音楽、振動」は機能しています。
この NullPointerException の問題を修正するにはどうすればよいですか?
ありがとうございます。それでは、お元気で
java - LuaJ は __gc メタメソッド機能をサポートしていますか
いくつかの個人的な (些細な) プロジェクトで LuaJ を試してみたところ、__gc
以下の例に示すように、テーブル内のメタテーブルを使用できないように思われることがわかりました。
LuaJcollectgarbage()
では冗長な関数呼び出しであることは承知していますが、LuaJ は代わりに Java 独自のガベージ コレクションに依存しているため、他のインタープリターがそれを必要とするように思われるため、これを含めました (たとえばhttp://www.lua.org/にある Lua 独自のもの)。 cgi-bin/デモ)
与えられた例は、上記のオンライン インタープリターで機能するようです。
私は現在、何らかの方法でLuaJに問題があるか、プログラム実行の最後にガベージコレクションが発生し、収集されたオブジェクトで__gcメタメソッドを呼び出さないことが原因であると想定しています。
アプリケーションが終了する前に Java がテーブルを GC するのに十分な時間を与えようとしましたが、呼び出しに続いて長い待機期間を提供System.gc()
し、ランタイムにガベージ コレクションを提案するための呼び出しを行いましたが、現在はすべて役に立ちません。