Javaスレッドが初めてです。私がやろうとしているのは、ThreadBオブジェクトが現在実行中のスレッドThreadAのインスタンスにアクセスし、setSomethingというメソッドを呼び出すことです。 1)私は、私はそれが本当に 2)私はその方法ここJavaの別の実行スレッドからメソッドにアクセスする方法
にアクセスするときに、私は何か間違ったことしなければならない、nullポインタ例外を持っているよりも硬い作っていますだと思うが、私がこれまで持っていると私は私の原因をやっていることです勤勉と同様の質問StackOverflowでここを見た。
私はバックグラウンドで実行されている現在のスレッドを持っている:
// assume this thread is called by some other application
public class ThreadA implements Runnable{
private Thread aThread;
public ThreadA(){
aThread = new Thread(this);
aThread.setName("AThread");
aThread.start();
}
@Override
public void run(){
while(true){
// doing something
}
}
public void setSomething(String status){
// process something
}
}
// assume this thread is started by another application
public class ThreadB implements Runnable{
@Override
public void run(){
passAValue("New");
}
public void passAValue(String status){
// What I am trying to do is to get the instance of ThreadA and call
// its method setSomething but I am probably making it harder on myself
// not fully understanding threads
Method[] methods = null;
// get all current running threads and find the thread i want
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
for(Thread t : threadSet){
if(t.getName().equals("AThread")){
methods = t.getClass().getMethods();
}
}
//**How do I access ThreadA's method, setSomething**
}
}
事前に
アレン
は本当にあなたが直接アクセスできるように、ThreadB' '' _into_ ThreadA'オブジェクトを渡す方法はありません。クラスから反射ハッキングを行うのは最適ではありません。 – Gray
そして、「別のアプリケーションで起動しました」と言ったときに、別のJVMを意味するのではないでしょうか?別のJVMにある場合は、RMIやその他のプロセス間通信を使用する必要があります。またはファイルや何かを共有する。 – Gray
グレイの2番目のコメントは、受け入れられる回答でなければなりません! –