0

メソッドから2つの異なるタイプの変数(Future、ExecutorService)を返す必要があります。どうすれば一緒に移動できますか?これがコードの一部です。クラスAがあり、「B」クラスでrun()メソッドを呼び出そうとしています。「startExecutorService」はthreadExecutorを開始するメソッドであり、「stopExecutorService」はthreadExecutorを停止するメソッドです。

 public class A{
    public static void main(String[] args){

        A AObj= new A();

        Future<?> task = null;
        ExecutorService threadexec = null;

        task = AObj.startExecutorService(task, threadexec);

        AObj.stopExecutorService(task, threadexec);

    }

    public Future<?> startExecutorService(Future<?> control, ExecutorService threadExecutor){

        //'noOfThreads' determines the total no of threads to be created in threadpool
        int noOfThreads = 1;  

        // Creating an object for class 'B' which has the run() method
        B ThreadTaskOne   = new ExecutorServiceThreadClass();

        // Calling the ExecutorService to create Threadpool with specified number of threads
        threadExecutor = Executors.newFixedThreadPool(noOfThreads);

        // Creating a Future object 'control' and thereby starting the thread 'ThreadTaskOne' 
         control = threadExecutor.submit(ThreadTaskOne);    

         return control;
    }

    public void stopExecutorService(Future<?> task, ExecutorService threadExecutor){

        // Interrupting the thread created by threadExecutor
        task.cancel(true);

        if(task.isCancelled()){
            System.out.println("Task has been cancelled !!");
        }

        // Closing the threadExecutor
        threadExecutor.shutdownNow();

    }

}

'threadExecutor.shutdownNow();'の行の'stopExecutorService'メソッドで'NullPointerException'を取得しています。'このエラーの理由は、threadExecutor値がmainメソッドで変更されていないためです。'startExecutorService'メソッドでのみ変更されています。そこで、threadExecutorの変更された値をFutureとともにmainメソッドに戻したいと思います。

親切に私を助けてください

4

1 に答える 1

2

複合クラスを作成し、そのクラスのオブジェクトを返しますか?

class A{
}

class B{
}

class Composite{
  A varA;
  B varB;
  public Composite(A ax, B by){ varA = ax; varB = by;}
  public A returnA(){ return varA;}
  public B returnB(){ return varB;}
}

class Executor{
    A a;
    B b;
 ////// code here 
    public Composite returnComposite{
     Composite c = new Composite(a,b);
     return c;
  }
}
于 2012-10-18T18:53:49.330 に答える