OpenNTF に投稿された例を見てきました - http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=Threads%20and%20Jobs私の問題は、参照できないようです初期スレッドを作成するメインクラスの外部にある別のクラスに。
デモ コードに基づいて使用しようとしているコードを次に示します (これは正常に動作します)。内部クラス内から、この場合は外部クラスから Broadcast クラスを呼び出そうとするなど、さまざまなバリエーションを試しました。すべてのケースで ClassNotFoundException が発生します - 注意: Broadcast クラスはこの ThreadSample と同じパッケージに含まれています。
public class ThreadSample {
private MyThread myThread;
public boolean isRunning() {
return myThread != null;
}
public void startThread()
throws NotesException {
if (myThread != null) {
stopThread();
}
try {
{
if (myThread == null) {
myThread = new MyThread();
myThread.start();
}
System.out.println("Thread started");
}
} catch (Throwable t) {
t.printStackTrace();
}
}
public void stopThread() {
if (myThread != null) {
synchronized (ThreadSample.class) {
if (myThread != null) {
myThread.stopRequest = true;
myThread = null;
System.out.println(" >> Thread stopping");
}
}
}
}
public void test(){
System.out.println("HERE in Test");
Broadcast.test_subscribe();
}
class MyThread extends Thread {
boolean stopRequest;
private ThreadSessionExecutor<IStatus> executor;
MyThread() throws NotesException {
this.executor = new ThreadSessionExecutor<IStatus>() {
@Override
protected IStatus run(Session session) throws NotesException {
try {
System.out.println(" >> Thread running here");
ThreadSample.this.test_subscribe();
System.out.println(" >> After test call");
} catch (Throwable ex) {
ex.printStackTrace();
}
return Status.OK_STATUS;
}
};
}
public void run() {
while (!stopRequest) {
try {
executor.run();
} catch (Exception ex) {
}
}
System.out.println("Thread left");
}
}
}