diff --git a/src/bandit/Generator1.java b/src/bandit/Generator1.java new file mode 100644 index 0000000..c1392fa --- /dev/null +++ b/src/bandit/Generator1.java @@ -0,0 +1,111 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ + +package bandit; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Flow.Subscriber; +import java.util.concurrent.SubmissionPublisher; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Logger; +import bandit.util.OhmLogger; + +/** + * + * @author le + */ +public class Generator1 implements Runnable // Callable +{ + private static Logger lg = OhmLogger.getLogger(); //Logger sollten immer static sein da sie für alle instanzen loggs ausführen + + private int wert; + private volatile boolean laufend; + private ExecutorService eService; + + private final Object LOCK; + + private SubmissionPublisher wertPublisher; + + public Generator1() + { + wert = -1; + laufend = false; + eService = Executors.newSingleThreadExecutor(); + wertPublisher = new SubmissionPublisher<>(); + LOCK = new Object(); + } + + public void addWertSubscription(Subscriber subscriber) + { + wertPublisher.subscribe(subscriber); + } + + public void start() + { + laufend = true; + synchronized (LOCK) + { + LOCK.notify(); + } + + + if (eService.isShutdown()) + { + eService = Executors.newSingleThreadExecutor(); + } + eService.execute(this); + } + + public void stop() + { + laufend = false; + } + + @Override + public void run() + { + while (true) + { + while (!laufend) + { + synchronized (LOCK) + { + try + { + lg.info("WAIT"); + LOCK.wait(); + } + catch (InterruptedException ex) + { + lg.warning(ex.toString()); + } + } + } + + try + { + Thread.sleep(100); + } + catch (Exception ex) + { + System.err.println(ex); + } + this.berechneWert(); + wertPublisher.submit(wert); + } + } + + private synchronized void berechneWert() + { + wert = (int) (1 + 49*Math.random()); + } + + public synchronized int getWert() + { + return wert; + } + +} diff --git a/src/bandit/WertAdapter.java b/src/bandit/WertAdapter.java index 120720d..5106250 100644 --- a/src/bandit/WertAdapter.java +++ b/src/bandit/WertAdapter.java @@ -30,7 +30,6 @@ public class WertAdapter implements Subscriber { this.subscription = subscription; this.subscription.request(1); - //this.subscription.request(Long.MAX_VALUE); } @Override diff --git a/src/bandit/ZahlenView.form b/src/bandit/ZahlenView.form index 88ce7ad..fad57c7 100644 --- a/src/bandit/ZahlenView.form +++ b/src/bandit/ZahlenView.form @@ -23,20 +23,6 @@ - - - - - - - - - - - - - - @@ -58,5 +44,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/bandit/ZahlenView.java b/src/bandit/ZahlenView.java index dc7cdf5..83f7540 100644 --- a/src/bandit/ZahlenView.java +++ b/src/bandit/ZahlenView.java @@ -10,6 +10,27 @@ package bandit; */ public class ZahlenView extends javax.swing.JFrame { + + /** + * @return the lblZahl1 + */ + public javax.swing.JLabel getLblZahl1() { + return lblZahl1; + } + + /** + * @return the lblZahl2 + */ + public javax.swing.JLabel getLblZahl2() { + return lblZahl2; + } + + /** + * @return the lblZahl3 + */ + public javax.swing.JLabel getLblZahl3() { + return lblZahl3; + } /** * @return the btnStart */ @@ -31,7 +52,7 @@ public class ZahlenView extends javax.swing.JFrame */ public javax.swing.JLabel getLblZahl() { - return lblZahl; + return getLblZahl1(); } /** @@ -51,18 +72,16 @@ public class ZahlenView extends javax.swing.JFrame // //GEN-BEGIN:initComponents private void initComponents() { - lblZahl = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); btnStart = new javax.swing.JButton(); btnStop = new javax.swing.JButton(); + jPanel2 = new javax.swing.JPanel(); + lblZahl1 = new javax.swing.JLabel(); + lblZahl2 = new javax.swing.JLabel(); + lblZahl3 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - lblZahl.setFont(new java.awt.Font("Liberation Sans", 0, 100)); // NOI18N - lblZahl.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - lblZahl.setText("?"); - getContentPane().add(lblZahl, java.awt.BorderLayout.CENTER); - btnStart.setText("Start"); jPanel1.add(btnStart); @@ -71,6 +90,23 @@ public class ZahlenView extends javax.swing.JFrame getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END); + lblZahl1.setFont(new java.awt.Font("Liberation Sans", 0, 100)); // NOI18N + lblZahl1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + lblZahl1.setText("?"); + jPanel2.add(lblZahl1); + + lblZahl2.setFont(new java.awt.Font("Liberation Sans", 0, 100)); // NOI18N + lblZahl2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + lblZahl2.setText("?"); + jPanel2.add(lblZahl2); + + lblZahl3.setFont(new java.awt.Font("Liberation Sans", 0, 100)); // NOI18N + lblZahl3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + lblZahl3.setText("?"); + jPanel2.add(lblZahl3); + + getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER); + pack(); }// //GEN-END:initComponents @@ -127,6 +163,9 @@ public class ZahlenView extends javax.swing.JFrame private javax.swing.JButton btnStart; private javax.swing.JButton btnStop; private javax.swing.JPanel jPanel1; - private javax.swing.JLabel lblZahl; + private javax.swing.JPanel jPanel2; + private javax.swing.JLabel lblZahl1; + private javax.swing.JLabel lblZahl2; + private javax.swing.JLabel lblZahl3; // End of variables declaration//GEN-END:variables } diff --git a/src/bandit/Zahlengenerator.java b/src/bandit/Zahlengenerator.java index 5175616..9d723e1 100644 --- a/src/bandit/Zahlengenerator.java +++ b/src/bandit/Zahlengenerator.java @@ -12,37 +12,28 @@ import java.util.concurrent.SubmissionPublisher; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; import bandit.util.OhmLogger; +import java.util.concurrent.Flow; /** * * @author le */ -public class Zahlengenerator implements Runnable // Callable +public class Zahlengenerator implements Subscriber // Callable { private static Logger lg = OhmLogger.getLogger(); //Logger sollten immer static sein da sie für alle instanzen loggs ausführen private int wert; - /** Zustandsvariable !!! - * bei 2 Werten boolean sonst enum - */ -// private volatile boolean laufend; - private AtomicBoolean laufend; - //private Thread thd; - private ExecutorService eService; - - private final Object LOCK; - + private Flow.Subscription subscription; private SubmissionPublisher wertPublisher; + + private Generator1 generator1; + private Thread thd1; + public Zahlengenerator() { - wert = -1; - //laufend = false; - laufend = new AtomicBoolean(false); - //thd = null; - eService = Executors.newSingleThreadExecutor(); - wertPublisher = new SubmissionPublisher<>(); - LOCK = new Object(); + wertPublisher = new SubmissionPublisher<>(); + generator1 = new Generator1(); } public void addWertSubscription(Subscriber subscriber) @@ -52,69 +43,21 @@ public class Zahlengenerator implements Runnable // Callable public void start() { - //laufend = true; - laufend.set(true); - synchronized (LOCK) - { - LOCK.notify(); - } - - - if (eService.isShutdown()) - { - eService = Executors.newSingleThreadExecutor(); - } - eService.execute(this); - //Future task = eService.submit(this); v.a. bei callable -// if (thd == null) -// { -// thd = new Thread(this); -// thd.start(); -// } + if(thd1==null){ + thd1 = new Thread(generator1); + thd1.start(); + } + + generator1.start(); + } public void stop() { - //laufend = false; - laufend.set(false); + generator1.stop(); } - @Override - public void run() - { - while (true) - { - //while (!laufend) - while (!laufend.get()) - { - synchronized (LOCK) - { - try - { - lg.info("WAIT"); - LOCK.wait(); - } - catch (InterruptedException ex) - { - lg.warning(ex.toString()); - } - } - } - - try - { - Thread.sleep(100); - } - catch (Exception ex) - { - System.err.println(ex); - } - this.berechneWert(); - wertPublisher.submit(wert); - } -// thd = null; -// eService.shutdown(); - } + private synchronized void berechneWert() { @@ -125,5 +68,27 @@ public class Zahlengenerator implements Runnable // Callable { return wert; } + + @Override + public void onSubscribe(Flow.Subscription subscription) { + this.subscription = subscription; + this.subscription.request(1); + } + + @Override + public void onNext(Integer item) { + this.wertPublisher.submit(item); + this.subscription.request(1); + } + + @Override + public void onError(Throwable throwable) { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public void onComplete() { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } }