Java で Consumer-Producer 問題を実装していますが、これに guy を追加する必要があります。私の問題は、UI コンポーネントをCustomer
またはProducer
クラスから変更することです。
これらのコンポーネントを他のクラスから呼び出す方法がわかりません-関連するクラスではありません。たとえば、コンポーネントを取得しようとするとheight
、すべてが魅力的に機能しますが、何かをしようとしてset
も何も起こりません!
これは私のProducer
クラスコードで、いくつかの試みがあります:
public class Producer extends Thread {
// Variable which holds shared queue
private BlockingQueue<String> queue;
// Amount products created by producer
private int steps;
// Object with normaln distribution
private NormalDistribution distribution;
// Accessors to the frame
private PCPMainFrame frame;
private JSlider queueSlider;
private JProgressBar queueProgressBar;
// Constructor with 4 arguments
// q - is our queue shared between customer and producer
// steps - amount of products
// mean - parameter rquired for normal distribution
// standardDeviation - ditto
public Producer(BlockingQueue<String> q, int steps, double mean, double standardDeviation){
this.queue=q;
this.steps = steps;
this.distribution = new NormalDistribution(mean, standardDeviation);
this.frame = new PCPMainFrame();
this.queueSlider = frame.getQueueSlider();
this.queueProgressBar = new JProgressBar();
}
@Override
public void run() {
// Generating products and filling queue with them
for(int i = 0; i < steps; i++){
try {
long sleepTime = Math.abs((long)distribution.sample()*100);
Thread.sleep(sleepTime);
// Saving element in queue
queue.put(String.valueOf(i));
// This is a log for developer needs, feel free to uncomment
System.out.println("Produced: " + i);
queueSlider.setValue(steps);
frame.setQueueProgressBar(queueProgressBar);
} catch (InterruptedException e) {
System.out.println("Producer exception: " + e);
}
}
// Ading exit message at the end of the queue
String exit = new String("exit");
try {
queue.put(exit);
} catch (InterruptedException e) {
System.out.println("Queue exception: " + e);
}
}
}