Hallo liebes Forum,
ich benötige ein paar Denkanstöße,
drum schreib ich erstmal die Aufgabenstellung ...
12 Kühe stehen im Stall und die Euter füllen sich (unterschiedlich schnell)
und es stehen 3 Melkstationen zur Verfügung
Bei einem Füllstand von 75% werden sie automatisch an den Melkstationen angemeldet,
die Euter füllen sich weiter, aber etwas langsamer.
Konnte bei einem Füllstand von 120% nicht abgemolken werden,
dann platzt das Euter --> Kuh tot.
An den Melkstationen soll man stets sehen können welche Kuh gerade gemolken wird.
Das ganze verpackt in eine einfache Swing Gui,
beim Starten der Applikation beginnt direkt die Euterfüllung ...
meine Herangehensweise -
Lass erstmal das Euter anschwellen bis es platzt
Aber, siehe da - manchmal hat die ein oder andere Kuh ein Euterfüllproblem,
dh. bei einem beliebigen Wert verweigert sie die Milchproduktion.
Ob sie ahnt dass sie bald sterben soll?
Wäre schön wenn jemand mal nen Blick auf die Euter-Threads werfen könnte ...
ich benötige ein paar Denkanstöße,
drum schreib ich erstmal die Aufgabenstellung ...
12 Kühe stehen im Stall und die Euter füllen sich (unterschiedlich schnell)
und es stehen 3 Melkstationen zur Verfügung
Bei einem Füllstand von 75% werden sie automatisch an den Melkstationen angemeldet,
die Euter füllen sich weiter, aber etwas langsamer.
Konnte bei einem Füllstand von 120% nicht abgemolken werden,
dann platzt das Euter --> Kuh tot.
An den Melkstationen soll man stets sehen können welche Kuh gerade gemolken wird.
Das ganze verpackt in eine einfache Swing Gui,
beim Starten der Applikation beginnt direkt die Euterfüllung ...
meine Herangehensweise -
Lass erstmal das Euter anschwellen bis es platzt
Aber, siehe da - manchmal hat die ein oder andere Kuh ein Euterfüllproblem,
dh. bei einem beliebigen Wert verweigert sie die Milchproduktion.
Ob sie ahnt dass sie bald sterben soll?
Wäre schön wenn jemand mal nen Blick auf die Euter-Threads werfen könnte ...
Java:
package consumer;
import javax.swing.JLabel;
public class Kuh extends Thread {
JLabel label;
public Kuh(JLabel label) {
this.label = label;
this.start();
}
public void ende(){
interrupt();
}
public void run(){
while(!isInterrupted()){
try {
for (int euter = 0; euter <= 120; euter++) {
label.setText(euter + "%");
sleep( (int)(Math.random()*80) );
if (euter >75){
synchronized (this) {
try {
// anmelden an der Melkstation
wait((int)(Math.random()*180));
System.out.println(" Wartezeit 1, euter:" + euter);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Exception 1, euter:" + euter);
}
}
}
if (euter==120){
ende();
label.setText("RIP");
}
}
break;
} catch (Exception e) {
}
}
}
}
Java:
package consumer;
import java.awt.BorderLayout;
public class View1 extends JFrame {
private JPanel contentPane;
public View1() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 600, 180);
this.setLocationRelativeTo(null);
setResizable(false);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.NORTH);
JLabel lblKuh = new JLabel("Kuh1");
lblKuh.setPreferredSize(new Dimension(40, 25));
lblKuh.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh);
JLabel lblKuh_1 = new JLabel("Kuh2");
lblKuh_1.setPreferredSize(new Dimension(40, 25));
lblKuh_1.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_1);
JLabel lblKuh_2 = new JLabel("Kuh3");
lblKuh_2.setPreferredSize(new Dimension(40, 25));
lblKuh_2.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_2);
JLabel lblKuh_3 = new JLabel("Kuh4");
lblKuh_3.setPreferredSize(new Dimension(40, 25));
lblKuh_3.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_3);
JLabel lblKuh_4 = new JLabel("Kuh5");
lblKuh_4.setPreferredSize(new Dimension(40, 25));
lblKuh_4.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_4);
JLabel lblKuh_5 = new JLabel("Kuh6");
lblKuh_5.setPreferredSize(new Dimension(40, 25));
lblKuh_5.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_5);
JLabel lblKuh_6 = new JLabel("Kuh7");
lblKuh_6.setPreferredSize(new Dimension(40, 25));
lblKuh_6.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_6);
JLabel lblKuh_7 = new JLabel("Kuh8");
lblKuh_7.setPreferredSize(new Dimension(40, 25));
lblKuh_7.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_7);
JLabel lblKuh_8 = new JLabel("Kuh9");
lblKuh_8.setPreferredSize(new Dimension(40, 25));
lblKuh_8.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_8);
JLabel lblKuh_9 = new JLabel("Kuh10");
lblKuh_9.setPreferredSize(new Dimension(40, 25));
lblKuh_9.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel.add(lblKuh_9);
JPanel panel_1 = new JPanel();
contentPane.add(panel_1, BorderLayout.CENTER);
JLabel lblK = new JLabel("K1");
lblK.setPreferredSize(new Dimension(40, 25));
lblK.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
lblK.setMaximumSize(new Dimension(24, 14));
lblK.setMinimumSize(new Dimension(24, 14));
panel_1.add(lblK);
new Kuh(lblK);
JLabel lblK_1 = new JLabel("K2");
lblK_1.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
lblK_1.setPreferredSize(new Dimension(40, 25));
panel_1.add(lblK_1);
new Kuh(lblK_1);
JLabel lblK_2 = new JLabel("K3");
lblK_2.setPreferredSize(new Dimension(40, 25));
lblK_2.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_1.add(lblK_2);
new Kuh(lblK_2);
JLabel lblK_3 = new JLabel("K4");
lblK_3.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
lblK_3.setPreferredSize(new Dimension(40, 25));
panel_1.add(lblK_3);
new Kuh(lblK_3);
JLabel lblK_4 = new JLabel("K5");
lblK_4.setPreferredSize(new Dimension(40, 25));
lblK_4.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_1.add(lblK_4);
new Kuh(lblK_4);
JLabel lblK_5 = new JLabel("K6");
lblK_5.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
lblK_5.setPreferredSize(new Dimension(40, 25));
panel_1.add(lblK_5);
new Kuh(lblK_5);
JLabel lblK_6 = new JLabel("K7");
lblK_6.setPreferredSize(new Dimension(40, 25));
lblK_6.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_1.add(lblK_6);
// System.out.println(lblK_6.getName());
new Kuh(lblK_6);
JLabel lblK_7 = new JLabel("K8");
lblK_7.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
lblK_7.setPreferredSize(new Dimension(40, 25));
panel_1.add(lblK_7);
new Kuh(lblK_7);
JLabel lblK_8 = new JLabel("K9");
lblK_8.setPreferredSize(new Dimension(40, 25));
lblK_8.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_1.add(lblK_8);
new Kuh(lblK_8);
JLabel lblK_9 = new JLabel("K10");
lblK_9.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
lblK_9.setPreferredSize(new Dimension(40, 25));
panel_1.add(lblK_9);
new Kuh(lblK_9);
JPanel panel_2 = new JPanel();
contentPane.add(panel_2, BorderLayout.SOUTH);
JLabel lblMelkstation = new JLabel("Melkstation1");
lblMelkstation.setPreferredSize(new Dimension(80, 25));
lblMelkstation.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_2.add(lblMelkstation);
JLabel lblK_10 = new JLabel("wait");
lblK_10.setPreferredSize(new Dimension(40, 25));
lblK_10.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_2.add(lblK_10);
JLabel lblMelkstation_1 = new JLabel("Melkstation2");
lblMelkstation_1.setPreferredSize(new Dimension(80, 25));
lblMelkstation_1.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_2.add(lblMelkstation_1);
JLabel lblK_11 = new JLabel("wait");
lblK_11.setPreferredSize(new Dimension(40, 25));
lblK_11.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_2.add(lblK_11);
JLabel lblMelkstation_2 = new JLabel("Melkstation3");
lblMelkstation_2.setPreferredSize(new Dimension(80, 25));
lblMelkstation_2.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_2.add(lblMelkstation_2);
JLabel lblK_12 = new JLabel("wait");
lblK_12.setPreferredSize(new Dimension(40, 25));
lblK_12.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
panel_2.add(lblK_12);
}
public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
// if (source == ) ...
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
View1 frame = new View1();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Java:
package consumer;
public class Melkstation {
// ... hier sollte wohl auch was rein :)
}