@@ -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<Integer> wertPublisher; | |||
private SubmissionPublisher<Integer[]> 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<Integer> subscriber) | |||
public void addWertSubscription(Subscriber<Integer[]> 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()); | |||
} | |||
} |
@@ -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<Integer[]> 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<Integer[]> 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()); | |||
} | |||
} |
@@ -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<Integer[]> 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<Integer[]> 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()); | |||
} | |||
} |
@@ -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<Integer[]> // 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<Integer[]> 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<Integer[]> 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 | |||
} | |||
} |
@@ -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; |
@@ -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<Integer> | |||
public class WertAdapter implements Subscriber<Integer[]> | |||
{ | |||
private ZahlenView view; | |||
private Zahlengenerator model; | |||
@@ -33,10 +35,22 @@ public class WertAdapter implements Subscriber<Integer> | |||
} | |||
@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); | |||
} | |||
@@ -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(); | |||
} | |||
@@ -60,6 +60,11 @@ | |||
</Property> | |||
<Property name="horizontalAlignment" type="int" value="0"/> | |||
<Property name="text" type="java.lang.String" value="?"/> | |||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> | |||
<Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> | |||
<LineBorder/> | |||
</Border> | |||
</Property> | |||
</Properties> | |||
</Component> | |||
<Component class="javax.swing.JLabel" name="lblZahl2"> | |||
@@ -69,6 +74,11 @@ | |||
</Property> | |||
<Property name="horizontalAlignment" type="int" value="0"/> | |||
<Property name="text" type="java.lang.String" value="?"/> | |||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> | |||
<Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> | |||
<LineBorder/> | |||
</Border> | |||
</Property> | |||
</Properties> | |||
</Component> | |||
<Component class="javax.swing.JLabel" name="lblZahl3"> | |||
@@ -78,6 +88,11 @@ | |||
</Property> | |||
<Property name="horizontalAlignment" type="int" value="0"/> | |||
<Property name="text" type="java.lang.String" value="?"/> | |||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> | |||
<Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> | |||
<LineBorder/> | |||
</Border> | |||
</Property> | |||
</Properties> | |||
</Component> | |||
</SubComponents> |
@@ -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); |
@@ -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<Integer> // 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<Integer> wertPublisher; | |||
private Generator1 generator1; | |||
private Thread thd1; | |||
public Zahlengenerator() | |||
{ | |||
wertPublisher = new SubmissionPublisher<>(); | |||
generator1 = new Generator1(); | |||
} | |||
public void addWertSubscription(Subscriber<Integer> 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 | |||
} | |||
} |