これはあまりにも長時間作業していて、うまく動作しません。私は異なるクラス、すなわちWriteFileData(スレッドを拡張することができる)のスレッドタイプのリストを持っています。私はそのリストを通してforループを行い、バイト配列をキューに追加するための呼び出しを行います。私は現在、ブローカークラスでReflectionを使用してフィールド上のメソッドを呼び出す
// consumers is filled with different Thread types all having a queue
// variable of type LinkedBlockingQueue
ArrayList<Thread> consumers = new ArrayList<Thread>();
synchronized void insert(final byte[] send) throws InterruptedException {
for (final Thread c : consumers) {
if (c instanceof WriteFileData) {
((WriteFileData)c).queue.add(send);
}
...other class threads...
}
これを持っていますが、私は何をしたい
synchronized void insert(final byte[] send) throws InterruptedException {
for (final Thread c : consumers) {
Class<?> cls = Class.forName(c.getClass().getName());
Field field = cls.getDeclaredField("queue");
Class<?> cf = Class.forName(field.getType().getName());
Class[] params = new Class[]{Object.class};
Method meth = cf.getMethod("offer", params);
meth.invoke(cf, send); // errors at this line....
EDITの線に沿ってもっと何かである:固定「方法が見つからないエラー」が、今はできません私はそれをArrayに送信しているのでメソッドを呼び出すように見え、そのメソッドはObjectだけを必要としています。
....メサ。インボークで悲しいです。多くのレベルで深刻なので、これを行う方法がわかりません。キュー上でaddメソッドを使いたいのですが、それはクラス抽象化のレイヤーです。
ここWriteFileDataが持っているものである...ここで
public class WriteFileData extends Thread {
LinkedBlockingQueue<byte[]> queue = new LinkedBlockingQueue<byte[]>();
...
}
'メソッド? – havexz
質問にお答えして申し訳ありません。しかし、なぜ反射?反射を使用する代わりに使用する必要があります。反射はあなたが期待していない方法で本当にいくつかのものを壊すことができます。 例外とエラーメッセージを含めることができますか。私たちは何が間違っているか知る必要があるこれをデバッグすることを望みます。 –
JPM、getDeclaredMethod()からのエラーを教えてください。あなたのスレッドクラスにJavaインターフェイスを実装させて、共通のメソッドを呼び出せるように思えます。あなたのスレッドであるクラスを制御できますか? –