From 6ae236facd57e7d1e079dce07e81aa2e4efc34be Mon Sep 17 00:00:00 2001 From: schuhmannje82308 Date: Mon, 20 Nov 2023 17:38:28 +0100 Subject: [PATCH] Generators implementiert --- .../{ => Model/Generator}/Generator1.java | 29 +++-- src/bandit/Model/Generator/Generator2.java | 114 ++++++++++++++++++ src/bandit/Model/Generator/Generator3.java | 114 ++++++++++++++++++ src/bandit/Model/Zahlengenerator.java | 112 +++++++++++++++++ .../StartStopController.java | 4 +- .../{ => Schnittstelle}/WertAdapter.java | 24 +++- src/bandit/Start.java | 5 + src/bandit/{ => View}/ZahlenView.form | 15 +++ src/bandit/{ => View}/ZahlenView.java | 5 +- src/bandit/Zahlengenerator.java | 94 --------------- 10 files changed, 402 insertions(+), 114 deletions(-) rename src/bandit/{ => Model/Generator}/Generator1.java (79%) create mode 100644 src/bandit/Model/Generator/Generator2.java create mode 100644 src/bandit/Model/Generator/Generator3.java create mode 100644 src/bandit/Model/Zahlengenerator.java rename src/bandit/{ => Schnittstelle}/StartStopController.java (91%) rename src/bandit/{ => Schnittstelle}/WertAdapter.java (62%) rename src/bandit/{ => View}/ZahlenView.form (83%) rename src/bandit/{ => View}/ZahlenView.java (93%) delete mode 100644 src/bandit/Zahlengenerator.java diff --git a/src/bandit/Generator1.java b/src/bandit/Model/Generator/Generator1.java similarity index 79% rename from src/bandit/Generator1.java rename to src/bandit/Model/Generator/Generator1.java index c1392fa..128e790 100644 --- a/src/bandit/Generator1.java +++ b/src/bandit/Model/Generator/Generator1.java @@ -3,8 +3,9 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ -package bandit; +package bandit.Model.Generator; +import bandit.Model.Zahlengenerator; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Flow.Subscriber; @@ -21,24 +22,28 @@ 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 Integer[] wert; private volatile boolean laufend; private ExecutorService eService; private final Object LOCK; - private SubmissionPublisher wertPublisher; + private SubmissionPublisher wertPublisher; - public Generator1() + public Generator1(Zahlengenerator hauptgenerator) { - wert = -1; + wert = new Integer[2]; + wert[0] = -1; + wert[1] = 1; + laufend = false; eService = Executors.newSingleThreadExecutor(); wertPublisher = new SubmissionPublisher<>(); + this.addWertSubscription(hauptgenerator); LOCK = new Object(); } - public void addWertSubscription(Subscriber subscriber) + public void addWertSubscription(Subscriber subscriber) { wertPublisher.subscribe(subscriber); } @@ -61,7 +66,9 @@ public class Generator1 implements Runnable // Callable public void stop() { - laufend = false; + synchronized(LOCK){ + laufend = false; + } } @Override @@ -100,12 +107,8 @@ public class Generator1 implements Runnable // Callable private synchronized void berechneWert() { - wert = (int) (1 + 49*Math.random()); - } - - public synchronized int getWert() - { - return wert; + wert[0] = (int) (1 + 6*Math.random()); } + } diff --git a/src/bandit/Model/Generator/Generator2.java b/src/bandit/Model/Generator/Generator2.java new file mode 100644 index 0000000..7189fec --- /dev/null +++ b/src/bandit/Model/Generator/Generator2.java @@ -0,0 +1,114 @@ +/* + * 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.Model.Generator; + +import bandit.Model.Zahlengenerator; +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 Generator2 implements Runnable // Callable +{ + private static Logger lg = OhmLogger.getLogger(); //Logger sollten immer static sein da sie für alle instanzen loggs ausführen + + private Integer[] wert; + private volatile boolean laufend; + private ExecutorService eService; + + private final Object LOCK; + + private SubmissionPublisher wertPublisher; + + public Generator2(Zahlengenerator hauptgenerator) + { + wert = new Integer[2]; + wert[0] = -1; + wert[1] = 2; + + laufend = false; + eService = Executors.newSingleThreadExecutor(); + wertPublisher = new SubmissionPublisher<>(); + this.addWertSubscription(hauptgenerator); + 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() + { + synchronized(LOCK){ + 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[0] = (int) (1 + 6*Math.random()); + } + + +} diff --git a/src/bandit/Model/Generator/Generator3.java b/src/bandit/Model/Generator/Generator3.java new file mode 100644 index 0000000..1bc0edb --- /dev/null +++ b/src/bandit/Model/Generator/Generator3.java @@ -0,0 +1,114 @@ +/* + * 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.Model.Generator; + +import bandit.Model.Zahlengenerator; +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 Generator3 implements Runnable // Callable +{ + private static Logger lg = OhmLogger.getLogger(); //Logger sollten immer static sein da sie für alle instanzen loggs ausführen + + private Integer[] wert; + private volatile boolean laufend; + private ExecutorService eService; + + private final Object LOCK; + + private SubmissionPublisher wertPublisher; + + public Generator3(Zahlengenerator hauptgenerator) + { + wert = new Integer[2]; + wert[0] = -1; + wert[1] = 3; + + laufend = false; + eService = Executors.newSingleThreadExecutor(); + wertPublisher = new SubmissionPublisher<>(); + this.addWertSubscription(hauptgenerator); + 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() + { + synchronized(LOCK){ + 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[0] = (int) (1 + 6*Math.random()); + } + + +} diff --git a/src/bandit/Model/Zahlengenerator.java b/src/bandit/Model/Zahlengenerator.java new file mode 100644 index 0000000..4684c9d --- /dev/null +++ b/src/bandit/Model/Zahlengenerator.java @@ -0,0 +1,112 @@ +/* + * 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.Model; + +import bandit.Model.Generator.Generator1; +import bandit.Model.Generator.Generator2; +import bandit.Model.Generator.Generator3; +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; +import java.util.concurrent.Flow; + +/** + * + * @author le + */ +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; + private Flow.Subscription subscription; + private SubmissionPublisher wertPublisher; + + private Generator1 generator1; + private Thread thd1; + + private Generator2 generator2; + private Thread thd2; + + private Generator3 generator3; + private Thread thd3; + + + public Zahlengenerator() + { + wertPublisher = new SubmissionPublisher<>(); + generator1 = new Generator1(this); + generator2 = new Generator2(this); + generator3 = new Generator3(this); + + + } + + public void addWertSubscription(Subscriber subscriber) + { + wertPublisher.subscribe(subscriber); + } + + public void start() + { + if(thd1==null){ + thd1 = new Thread(generator1); + thd1.start(); + } + if(thd2==null){ + thd2 = new Thread(generator2); + thd2.start(); + } + if(thd3==null){ + thd3 = new Thread(generator3); + thd3.start(); + } + + generator1.start(); + generator2.start(); + generator3.start(); + + + } + + public void stop() + { + generator1.stop(); + generator2.stop(); + generator3.stop(); + } + + + + +@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 +} + +} diff --git a/src/bandit/StartStopController.java b/src/bandit/Schnittstelle/StartStopController.java similarity index 91% rename from src/bandit/StartStopController.java rename to src/bandit/Schnittstelle/StartStopController.java index 677d85a..636673f 100644 --- a/src/bandit/StartStopController.java +++ b/src/bandit/Schnittstelle/StartStopController.java @@ -3,8 +3,10 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ -package bandit; +package bandit.Schnittstelle; +import bandit.Model.Zahlengenerator; +import bandit.View.ZahlenView; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.logging.Logger; diff --git a/src/bandit/WertAdapter.java b/src/bandit/Schnittstelle/WertAdapter.java similarity index 62% rename from src/bandit/WertAdapter.java rename to src/bandit/Schnittstelle/WertAdapter.java index 5106250..e9ebb42 100644 --- a/src/bandit/WertAdapter.java +++ b/src/bandit/Schnittstelle/WertAdapter.java @@ -3,8 +3,10 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ -package bandit; +package bandit.Schnittstelle; +import bandit.Model.Zahlengenerator; +import bandit.View.ZahlenView; import java.util.concurrent.Flow; import java.util.concurrent.Flow.Subscriber; import java.util.concurrent.Flow.Subscription; @@ -13,7 +15,7 @@ import java.util.concurrent.Flow.Subscription; * * @author le */ -public class WertAdapter implements Subscriber +public class WertAdapter implements Subscriber { private ZahlenView view; private Zahlengenerator model; @@ -33,10 +35,22 @@ public class WertAdapter implements Subscriber } @Override - public void onNext(Integer item) + public void onNext(Integer item[]) { - String strWert = String.valueOf(item); - view.getLblZahl().setText(strWert); + String strWert = String.valueOf(item[0]); + + switch(item[1]){ + case 1: + view.getLblZahl1().setText(strWert); + break; + case 2: + view.getLblZahl2().setText(strWert); + break; + case 3: + view.getLblZahl3().setText(strWert); + break; + } + this.subscription.request(1); } diff --git a/src/bandit/Start.java b/src/bandit/Start.java index caedbbc..0ce2712 100644 --- a/src/bandit/Start.java +++ b/src/bandit/Start.java @@ -5,6 +5,10 @@ package bandit; +import bandit.View.ZahlenView; +import bandit.Schnittstelle.WertAdapter; +import bandit.Schnittstelle.StartStopController; +import bandit.Model.Zahlengenerator; import javax.swing.JOptionPane; import javax.swing.UIManager; @@ -24,6 +28,7 @@ public class Start controller.registerEvents(); model.addWertSubscription(adapter); view.setVisible(true); + view.pack(); } diff --git a/src/bandit/ZahlenView.form b/src/bandit/View/ZahlenView.form similarity index 83% rename from src/bandit/ZahlenView.form rename to src/bandit/View/ZahlenView.form index fad57c7..05f5558 100644 --- a/src/bandit/ZahlenView.form +++ b/src/bandit/View/ZahlenView.form @@ -60,6 +60,11 @@ + + + + + @@ -69,6 +74,11 @@ + + + + + @@ -78,6 +88,11 @@ + + + + + diff --git a/src/bandit/ZahlenView.java b/src/bandit/View/ZahlenView.java similarity index 93% rename from src/bandit/ZahlenView.java rename to src/bandit/View/ZahlenView.java index 83f7540..e457f23 100644 --- a/src/bandit/ZahlenView.java +++ b/src/bandit/View/ZahlenView.java @@ -2,7 +2,7 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template */ -package bandit; +package bandit.View; /** * @@ -93,16 +93,19 @@ public class ZahlenView extends javax.swing.JFrame lblZahl1.setFont(new java.awt.Font("Liberation Sans", 0, 100)); // NOI18N lblZahl1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); lblZahl1.setText("?"); + lblZahl1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel2.add(lblZahl1); lblZahl2.setFont(new java.awt.Font("Liberation Sans", 0, 100)); // NOI18N lblZahl2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); lblZahl2.setText("?"); + lblZahl2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel2.add(lblZahl2); lblZahl3.setFont(new java.awt.Font("Liberation Sans", 0, 100)); // NOI18N lblZahl3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); lblZahl3.setText("?"); + lblZahl3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jPanel2.add(lblZahl3); getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER); diff --git a/src/bandit/Zahlengenerator.java b/src/bandit/Zahlengenerator.java deleted file mode 100644 index 9d723e1..0000000 --- a/src/bandit/Zahlengenerator.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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; -import java.util.concurrent.Flow; - -/** - * - * @author le - */ -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; - private Flow.Subscription subscription; - private SubmissionPublisher wertPublisher; - - private Generator1 generator1; - private Thread thd1; - - - public Zahlengenerator() - { - wertPublisher = new SubmissionPublisher<>(); - generator1 = new Generator1(); - } - - public void addWertSubscription(Subscriber subscriber) - { - wertPublisher.subscribe(subscriber); - } - - public void start() - { - if(thd1==null){ - thd1 = new Thread(generator1); - thd1.start(); - } - - generator1.start(); - - } - - public void stop() - { - generator1.stop(); - } - - - - private synchronized void berechneWert() - { - wert = (int) (1 + 49*Math.random()); - } - - public synchronized int getWert() - { - 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 - } - -}