問題タブ [java-bridge-method]
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.
python - Mac OS X で NLTK を使用する Celery スレッドで python-javabridge JVM を使用すると致命的なエラーが発生する
python-javabridgeに基づくWeka 用の Python ラッパーを使用しています。私は実行する長いタスクがあるため、Celeryを使用しています。問題は私が得ることです
スレッド内で JVM を開始するとき。そのために、次の 2 行のコードが使用されます ( weka.core.jvmから)。
私が読んだことから、おそらくJVMがCeleryスレッドに接続されていないことが原因です。ただし、javabridge.attach()
実際にはその中で実行されます。
何が欠けていますか?
編集:問題を引き起こしているコードを特定しました。これはNLTK トークナイザーと関係があります。次のコード ( Vebjorn の回答によると) は、エラーを再現します。
JVM を起動しなくても、コードは正しく実行されます。Celery タスクとして実行されていない場合にも機能します。クラッシュする理由がわかりません。
EDIT 2:実際にはクリーンな Ubuntu 環境 ( Dockerized ) で動作しますが、Mac OS X Yosemite (v10.3) では動作しません。
編集 3:コメントで述べたように、関数from nltk.tokenize import RegexpTokenizer
内のタスク ラッパー内で実行された場合にhello()
機能します。
java - PythonプログラムからJavaプログラム(.javaコードファイル)を実行するには?
私は基本的にpythonコードを書きたいと思っています。そこから入力文字列をjaveプログラムに送り、javaプログラムがそれを実行して結果をpythonファイルに返します。出来ますか?
java - javabridgeを使用してPythonでJava jarクラスを実行する
Pythonからjarファイルにあるいくつかのクラスを呼び出そうとしています。パスを設定して、次のように実行しようとしています:
これを実行すると、以下のエラーが発生します。
javabridge を使用して jar 内のクラスを呼び出す方法がわかりません。だれか助けてもらえますか?
java - 異なる Java バージョンでのデフォルト メソッドの奇妙な動作
次のクラス階層があるとします。
ご覧のとおり、MutableSet
クラスのみが$plus
メソッドの実装を提供します。テスト ケースでは、 type のインスタンスでこのメソッドを呼び出していますArraySet
。CI 環境では常にテストに合格しますがAbstractMethodError
、ローカル環境では常に失敗します。どちらの場合も、Gradle (2.7) を使用しています。
エラー:
テストコード:
java -version
出力:
CI (動作する場所):
/li>ローカル (失敗した場所):
/li>
javac
これは、コンパイラが必要なすべてのブリッジ メソッドを追加できない (コードは警告やエラーなしでコンパイルされる) 何らかのバグであると予想しています。IntelliJ IDEA では、javac
Eclipse コンパイラを使用する場合と使用する場合の両方で問題が発生します。
java - Java の型消去チュートリアル
Oracle の Generics Trail ( Type Erasure ) を読んでいますが、次の部分を理解できませんでした。
コード スニペットを以下に示します。
トレイルでは、次のことが言及されています。
次のコードを検討してください。
型消去後、このコードは次のようになります。
同じチュートリアルから引用 -
コードが実行されると次のようになります
- n.setData("こんにちは"); メソッド setData(Object) がクラス MyNode のオブジェクトで実行されます。(MyNode クラスは Node から setData(Object) を継承しました。)
- setData(Object) の本体では、n によって参照されるオブジェクトのデータ フィールドが String に割り当てられます。
- mn を介して参照される同じオブジェクトのデータ フィールドにアクセスでき、整数であることが期待されます (mn は Node.js である MyNode であるため)。
- String を Integer に割り当てようとすると、Java コンパイラによって割り当て時に挿入されたキャストから ClassCastException が発生します。
データを取得しようとすると例外が発生する理由がわかりません。私の理解が進む限り、データ自体を設定して例外をスローするべきではありません(これは私のコンパイラで発生しますが、Oracleのコンパイラを使用していないため、どちらが正しいかわかりません)?
私の理解が正しければ、クラス MyNode には2つのメソッドが必要です:
そのため、Node で setData(Object) を呼び出すと、MyNode でブリッジ メソッドが正しく呼び出され、クラスキャスト例外がスローされる場所である setData(Integer) が呼び出されます。しかし、オラクルのチュートリアルは、そうではないと言っています。では、私の理解のどこが間違っているのでしょうか? 理解を助けてください。
java - ブリッジメソッドの宣言方法を見つける方法は?
次のインターフェースと実装があるとします。
必要なのは、特定の Matcher 実装の matches(T) メソッドのパラメーターの型です。
CustomMatcher の場合を除いて機能する実装を次に示します。これは、オーバーライドされた matches(..) メソッドの検出に失敗し、String.class
代わりに を返すためですInteger.class
。
編集:
次のように引数の型を指定する必要のないソリューションを探しています。
java - バインドされたジェネリックが関係しているときに、Java が 2 つの宣言されたメソッドがあると主張するのはなぜですか?
次の定義を使用します。
なぜBaseServiceImpl.class.getDeclaredMethods()
2つのメソッドを返すのですか:
public java.lang.Object BaseServiceImpl.findOne(java.io.Serializable)
public java.lang.Object BaseServiceImpl.findOne(java.lang.Object)
これらをフィルタリングする方法はありますか?