# Prozessvisualisierung



## mu7ti (22. Jul 2018)

Hallo liebe Leute,

ich bräuchte mal dringend eure Hilfe. Im Rahmen meiner Bachelorarbeit soll ich eine Prozessvisualisierung in Java Programmieren. Dabei soll der Materialfluss in einem Walzwerk dargestellt werden. Die Mitarbeiter sollen auf dem Bildschirm genau sehen können, in welcher Walze sich das Material gerade befindet. Die Daten über die Geschwindigkeit des Materials und einige Weitere Daten sollen einer Datenbank entnommen werden. Zusätzlich sollen Daten wie die Stromaufnahme der Walzen in einem Balkendiagramm dargestellt werden. Die Grundlagen in Java habe ich mir bereits angeeignet und wäre nun in der Lage, einfache GUIs in Swing aufzubauen. Wie soll ich nun weiter machen? In welche Themen muss ich mich einarbeiten ? Hauptsächlich würde es mich interessieren, ob das ganze mit viel fleiß in 2 Monaten machbar ist?
Ich wäre für jede Hilfe Dankbar.


----------



## httpdigest (22. Jul 2018)

Hast du dir denn schon Gedanken gemacht, wie du das ganze visualisieren möchtest? Also erstmal völlig losgelöst von möglichen Implementierungen. Möchtest du daraus wirklich eine möglicherweise sogar animierte Grafik erstellen oder reicht auch einfach eine Tabellenansicht. Die einzelnen Walzen könnten z.B. einfach Spalten oder Zeilen in einer Tabelle sein und die Materialien sind dann entsprechend das andere (also Zeilen oder Spalten) und in der Zelle wird markiert, wenn ein Material gerade in einer jeweiligen Walze ist oder wie lange es bereits dort verweilt oder noch verweilen wird.


----------



## Javinner (22. Jul 2018)

mu7ti hat gesagt.:


> Hauptsächlich würde es mich interessieren, ob das *G*anze mit viel *F*leiß in 2 Monaten machbar ist?
> Ich wäre für jede Hilfe *d*ankbar.


Hast du schon in einem metallverarbeitenden Betrieb ein Praktika absolviert?


----------



## httpdigest (22. Jul 2018)

Javinner hat gesagt.:


> Hast du schon in einem metallverarbeitenden Betrieb ein Praktik*um* absolviert?


----------



## Javinner (22. Jul 2018)

@httpdigest 
Vielen Dank für die Belehrung


----------



## mu7ti (22. Jul 2018)

Vielen Dank für die schnelle Antwort. So in etwa soll das dann am Ende aussehen. Das Material würde sich dann zwischen den gezeichneten Kreisen bewegen.


----------



## mu7ti (22. Jul 2018)

Ja, habe ich. Inwiefern spielt das denn eine Rolle ?


----------



## Javinner (22. Jul 2018)

mu7ti hat gesagt.:


> Ja, habe ich. Inwiefern spielt das denn eine Rolle ?


Nur zur Info. Hast du die GUI bereits erstellt oder ist es die Vorgabe?


----------



## mu7ti (22. Jul 2018)

Das ist nur ein Layout, das ich mit einem Grafikprogramm erstellt habe. Jetzt soll ich das ganze in Java erstellen und zusätzlich die Animation einbauen.


----------



## Javinner (22. Jul 2018)

@mu7ti 
Falls du NetBeans benutzt, würde ich an deiner Stelle den bereitgestellten GUI-Builder benutzen.
Das ist wesentlich einfacher, als jedem Element ein Platz zuzuweisen. 
Die Animation soll, so vermute ich, so ablaufen, dass jeder der grünen Kreise die Farbe wechseln soll, wenn das Material gerade dort bearbeitet wird. So kannst du dazu Icons verwenden. Sonst kann ich dir die und die Seite empfehlen, um dich besser mit dem Thema vertraut zu machen. Kannst dich dann melden, wenn du hier und da Fragen hast. Zwei Monate? Zeit ist relativ, ich würde an deiner Stelle keine verschwenden


----------



## mu7ti (22. Jul 2018)

Also das Material (in diesem Fall der Draht) soll sich tatsächlich zwischen den Kreisen bewegen bewegen. 
Ist das dann mit Java Swing machbar? Oder brauch ich da noch andere APIs?


----------



## Javinner (22. Jul 2018)

@mu7ti 
Ob es da eine API dafür gibt, wird dir deine FH wohl besser beantworten können. Ob man eine basteln könnte, kann ich mit "ja" beantworten.


----------



## mu7ti (22. Jul 2018)

Also, jetzt mal etwas konkreter gefragt, ist diese Aufgabe (GUI erstellen wie auf dem Layout + Animation) mit dem Swing GUI Toolkit machbar oder muss ich mich dafür in JavaFX einarbeiten ?


----------



## mrBrown (22. Jul 2018)

Ja, generell ist das auch mit Swing machbar, ich halte JavaFX aber für die sinnvollere Lösung.
2 Monate sind ohne Vorwissen aber sehr optimistisch.


----------



## Javinner (22. Jul 2018)

@mu7ti
Es ist garantiert machbar! Jedoch gilt, laut einiger, dass Swing tot ist und nicht weiter entwickelt wird. Somit ist JavaFX die Zukunftsmusik, bzw. DIE aktuelle Geschichte. Es kommt nun auf dich an, was du machen willst, ob du dich in etwas totgesagtes einarbeiten willst. Für beide gibt es mittlerweile richtig gute Tutorials, deine Entscheidung!


----------



## mu7ti (22. Jul 2018)

Also ist euer beider Rat, dass ich mich zunächst in JavaFX einarbeite ?!
Wie geht es dann weiter ? Wie bekomme ich das Material dazu sich zu bewegen, und das mit einer vorgegebenen Geschwindigkeit?


----------



## AliasAlreadyTaken (22. Jul 2018)

Das kommt drauf an, was du danach vorhast. Für ein neues Projekt was neues lernen ist cool, aber Zeit ist begrenzt.

JavaFX ist zwar die Zukunft, aber viele bestehende Projekte bauen halt noch auf Swing oder sogar AWT. Zwar wird die API selbst nicht weiterentwickelt, aber es gibt noch zig Leute, die lieber irgendwas in SWing anfangen als in JAvaFX. Begründung funktioniert in etwa so: Für Swing find ich 2000 Leute für mein Projekt, für JavaFX vielleicht ein Dutzend. (Ok, leicht übertrieben  ) Wenn du "von Grund auf" startest und niemals nicht in die Verlegenheit kommen wirst, alten Code von Mitarbeitern, die es nicht mehr gibt zu warten, dann JavaFX.

Was du suchst, sind "JavaFX Animations", zB hier: https://www.tutorialspoint.com/javafx/javafx_animations.htm


----------



## mu7ti (22. Jul 2018)

Dann bleibt mir wohl nichts anderes übrig, als mich in JavaFX einzuarbeiten. Gibt es denn ein Tutorial, das Sie mir empfehlen können? Oder war diese Seite bereits als eine Empfehlung gedacht ?


----------



## Javinner (22. Jul 2018)

Du kannst hier auch noch etwas dazu lesen. Damit bist du für den Anfang sehr gut aufgestellt, wobei, besser als in der verlinkten Seite von @AliasAlreadyTaken , wird es kaum erklärt.


----------



## mrBrown (22. Jul 2018)

mu7ti hat gesagt.:


> Also ist euer beider Rat, dass ich mich zunächst in JavaFX einarbeite ?!


Das kommt auf dein Vorwissen an, das klang bisher so, als hast du sowohl mit Swing auch als JavaFX keine Erfahrung?
Dann eindeutig pro JavaFX. Solltest du aber schon Swing-Erfahrung haben, solltet du je nach Zeitdruck einfach damit arbeiten und dich nicht in was neues einarbeiten.


----------



## mihe7 (22. Jul 2018)

Mal nebenbei bemerkt: im Unterschied zu JavaFX wird Swing/AWT auch in Java 11 enthalten sein...


----------



## mu7ti (22. Jul 2018)

Wäre es denn schwerer das ganze mit Swing zu machen ? Also würde sich der Aufwand -in Bezug auf die Bachelorarbeit, nicht in Bezug auf meine zukünftige Karriere - lohnen den ich erbringen muss um JavaFX zu erlernen oder wäre ich mit Swing schneller am Ziel, da ich hier zumindest schon die Grundlagen beherrsche?


----------



## AndiE (22. Jul 2018)

Für mich ist nicht so die grafische Umsetzung im Vordergrund. Soweit ich mich erinnere, werden beim Drahtziehen der Draht auf der einen Seite ab- und auf der anderen Seite aufgewickelt, wobei sich mit sinkendem Durchmesser die Länge erhöht. Wenn ich jetzt vier Stationen habe, dann werden dort vier Lose bearbeitet, die nacheinander die Stationen wechseln, oder bei irgendeiner ihre Endlänge erreicht haben. Dann gäbe es fünf Lagerplätze, wo Draht in verschiedenen Stärken aufbewahrt wird. Dann braucht man auch die Umdrehungszahlen der Spindeln, aber nicht die Walzkraft, weil Drähte gezogen werden.


----------



## mrBrown (22. Jul 2018)

mihe7 hat gesagt.:


> Mal nebenbei bemerkt: im Unterschied zu JavaFX wird Swing/AWT auch in Java 11 enthalten sein...


JavaFX war noch nie in Java enthalten, nur in der Oracle-Variante 

Im Unterschied zu Swing und AWT ist es aber immerhin halbwegs modern und das auslagern ist eher Vorteil als Nachteil...





mu7ti hat gesagt.:


> Wäre es denn schwerer das ganze mit Swing zu machen ? Also würde sich der Aufwand -in Bezug auf die Bachelorarbeit, nicht in Bezug auf meine zukünftige Karriere - lohnen den ich erbringen muss um JavaFX zu erlernen oder wäre ich mit Swing schneller am Ziel, da ich hier zumindest schon die Grundlagen beherrsche?


Kommt drauf an, wie tief die Grundlagen sind.
JavaFX macht das Interface-Design schon deutlich einfacher, mMn, und auch sowas wie Animationen ist damit deutlich einfacher umzusetzen.


----------



## mu7ti (22. Jul 2018)

Mir sagte gerade ein Freund der selbst auf der Arbeit viel mit Java zutun hat, dass ich nach eventuellen Frameworks suchen sollte. Kennt Ihr vll passende Frameworks dazu ?


----------



## mihe7 (22. Jul 2018)

mrBrown hat gesagt.:


> JavaFX war noch nie in Java enthalten, nur in der Oracle-Variante


Oracle hat seinerzeit JavaFX als Nachfolger von Swing angekündigt und mit dem JDK ausgeliefert. Man hätte erwarten können, dass Swing durch JavaFX ersetzt wird. Ironischerweise passiert jetzt genau das Gegenteil: AWT/Swing bleiben, JavaFX fliegt. Für JavaFX mag das einerseits ein Vorteil sein, andererseits wird es damit zu einem x-beliebigen UI-Toolkit für Java. Ich bin auf jeden Fall gespannt, wie sich die Sache weiterentwickelt.

@mu7ti Framework wofür?


----------



## mu7ti (22. Jul 2018)

Ich weiß auch nicht genau wofür  . Er meinte nur, ich solle nach Frameworks Ausschau halten.


----------



## mrBrown (22. Jul 2018)

mihe7 hat gesagt.:


> Oracle hat seinerzeit JavaFX als Nachfolger von Swing angekündigt und mit dem JDK ausgeliefert. Man hätte erwarten können, dass Swing durch JavaFX ersetzt wird. Ironischerweise passiert jetzt genau das Gegenteil: AWT/Swing bleiben, JavaFX fliegt. Für JavaFX mag das einerseits ein Vorteil sein, andererseits wird es damit zu einem x-beliebigen UI-Toolkit für Java. Ich bin auf jeden Fall gespannt, wie sich die Sache weiterentwickelt.


Ja, aber eben nur mit dem Oracle-JDK, nicht mit dem Open- oder sonstigem JDK  Es ändert sich daher auch nur für Oracle-JDK-Nutzer etwas.
Da gabs oft genug das Problem, dass Programme auf einem Rechner Problemlos liefen, und auf dem anderem nicht.
Bisher musste man dann händisch OpenJFX installieren, das dürfte damit einfacher werden.

"x-beliebig" wird's für mich nicht, es bleibt zumindest meiner Ansicht nach immer noch der Swing-Nachfolger.




mu7ti hat gesagt.:


> Ich weiß auch nicht genau wofür  . Er meinte nur, ich solle nach Frameworks Ausschau halten.


Das ist jetzt ungefähr so, wie im Baumarkt fragen, ob sie dir Werkzeug empfehlen können, du weißt nur noch nicht wofür 
Was man in deinem Fall u.U. nutzen kann ist JPA, dürfte aber etwas zu viel sein, deinen bisher genannten Anforderungen nach.


----------



## httpdigest (22. Jul 2018)

Zum Zeichnen von Diagrammen (z.B. eines Balkendiagrammes) würde ich auf jeden Fall so etwas wie JFreeChart empfehlen.


----------



## mrBrown (22. Jul 2018)

httpdigest hat gesagt.:


> Zum Zeichnen von Diagrammen (z.B. eines Balkendiagrammes) würde ich auf jeden Fall so etwas wie JFreeChart empfehlen.


Zumindest wenn man Swing nutzt, mit JavaFX arbeitet das afaik nicht problemlos zusammen und das bringt da ja schon was passendes mit: https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/bar-chart.htm


----------



## mu7ti (22. Jul 2018)

Kennt denn einer das Buch JavaFX8 und würde es weiter empfehlen?


----------



## mihe7 (22. Jul 2018)

mrBrown hat gesagt.:


> "x-beliebig" wird's für mich nicht, es bleibt zumindest meiner Ansicht nach immer noch der Swing-Nachfolger.


Es ist weder im Standard noch künftig im de facto Standard (Oracle) enthalten. Diesbezüglich unterscheidet sich JavaFX somit nicht mehr von jedem anderen x-beliebigen UI-Toolkit. Wie gesagt: ich bin gespannt, wie sich die Sache entwickelt.


----------



## ralfb1105 (28. Jul 2018)

Hallo,

Vielleicht kannst Du die Bibliothek JFreeChart für die dynamische Darstellung der Stromstärken benutzen. Ich habe das mal für die Darstellung von TPS Daten einer Datenbank genutzt. Als Referenz hier der Link zu einem Beispiel hierfür aus dem Forum: https://www.java-forum.org/thema/dy...n-perfomance-daten.181444/page-4#post-1154662. Ohne mich in die Diskussion in Pro-Contra Swing - Java-FX einzumischen, ich habe es mit Swing gemacht ;-)

Gruß

Ralf


----------



## mu7ti (29. Jul 2018)

Hey,

vielen Dank für deinen Tipp. Ich habe mich dazu entschieden, das ganze mit JavaFX zu machen.


----------



## mu7ti (4. Aug 2018)

Hallo Leute,

ich habe mich in zwischen ein wenig in JavaFX eingearbeitet und wie Ihr auf den Bildern sehen könnt, habe ich bereits das Login und die Hauptseite programmiert. Bevor ich euch jetzt einige Fragen stelle, wäre es schön, wenn Ihr folgende Dinge bei euren Antworten beachtet. Und zwar soll das fertige Programm am Ende auf einem Server laufen und die Mitarbeiter sollen sich zur jeder Zeit von einem beliebigen Computer aus in das Programm einloggen und die Prozesse verfolgen können. Die Fragen die ich mir nun stelle sind, ob ich für das Login eine lokale Datenbank wie z.B sqligt nehmen muss oder besser keine lokale DB nehme. Weiterhin wüsste ich gern, wie ich das mit den Walzen genau umsetze. Mache ich da von den Shapes gebrauch oder binde ich einfach mein Layout ein, das ich zu Anfangs hochgeladen hatte? Falls ich das Layout als ImageView einbinden soll, wie bekomme ich später zwischen die Walzen meine Animation eingefügt? Ich möchte mich im voraus bedanken und hoffe, dass mir jemand helfen kann.


----------



## mu7ti (10. Aug 2018)

Hey,

wieso bekomme ich denn keine Hilfe mehr  ???

Kann mir denn zumindest jemand erklären, wie es in JavaFX mit den Threads abläuft? Die JavaFX-Application-Thread führt meines Wissens nach die start()-Methode aus und ist somit für die Erstellung des ScenenGraphen zuständig?!  Die EventHandler werden soweit ich es verstanden habe in der EventQueue ausgeführt - die z.B nach einem Button-Klick gestartet wird. Kommen sich die beiden Threads nicht dadurch in die Quere? In Swing musste man doch dafür alles in die EventQueue verlagern, damit die Erstellung der Komponenten und die EventHandler sich nicht gegenseitig stören.


----------



## mrBrown (10. Aug 2018)

mu7ti hat gesagt.:


> Und zwar soll das fertige Programm am Ende auf einem Server laufen und die Mitarbeiter sollen sich zur jeder Zeit von einem beliebigen Computer aus in das Programm einloggen und die Prozesse verfolgen können. Die Fragen die ich mir nun stelle sind, ob ich für das Login eine lokale Datenbank wie z.B sqligt nehmen muss oder besser keine lokale DB nehme.


Wenn mehrere von beliebigen Computern aus die Datenbank nutzen sollen, muss die natürlich auf einem Server laufen. Lokal läuft dann nur die JavaFX-Anwendung.



mu7ti hat gesagt.:


> Mache ich da von den Shapes gebrauch oder binde ich einfach mein Layout ein, das ich zu Anfangs hochgeladen hatte? Falls ich das Layout als ImageView einbinden soll, wie bekomme ich später zwischen die Walzen meine Animation eingefügt?


Sinnvoll ist es wahrscheinlich, passende Shapes zu nutzen, und die zu animieren.
Das Layout als Bild im Hintergrund hat nicht viel Sinn.



mu7ti hat gesagt.:


> Kann mir denn zumindest jemand erklären, wie es in JavaFX mit den Threads abläuft? Die JavaFX-Application-Thread führt meines Wissens nach die start()-Methode aus und ist somit für die Erstellung des ScenenGraphen zuständig?! Die EventHandler werden soweit ich es verstanden habe in der EventQueue ausgeführt - die z.B nach einem Button-Klick gestartet wird. Kommen sich die beiden Threads nicht dadurch in die Quere? In Swing musste man doch dafür alles in die EventQueue verlagern, damit die Erstellung der Komponenten und die EventHandler sich nicht gegenseitig stören.


Alles was du beschreibst, läuft in *einem* Thread.
Nur wenn ein anderer Thread GUI-Änderungn durchführen soll, muss das in den Thread verschoben werden. Das ist nicht anders als in Swing


----------



## mu7ti (11. Aug 2018)

Hey, 

ich danke dir für deine schnelle Antwort. Wenn ich das richtig verstanden habe, dann ist in JavaFX der JavaFX-Application-Thread das Äquivalent zum EventQueue in Swing?!


----------



## mrBrown (11. Aug 2018)

mu7ti hat gesagt.:


> Wenn ich das richtig verstanden habe, dann ist in JavaFX der JavaFX-Application-Thread das Äquivalent zum EventQueue in Swing?!


Ja.


----------



## mu7ti (16. Aug 2018)

Hallo liebe Leute,

ich stehe vor einem Problem. Ich möchte eine TableView von einem Controller eines anderen Stages aus füllen. Und zwar soll sich nach einem Klick auf den Hinzufügen-Button, welches sich in der selben Stage wie die TableView befindet, eine neue Stage öffnen. Hier soll es möglich sein die Daten des neuen Kunden einzutragen und im Anschluss mit einem Klick auf den add-Button , welches sich in der neuen Stage befindet, die Daten in die Tabelle zu schreiben. Woraufhin sich die zweite Stage auch wieder schließen soll. Auch wenn ich noch nicht genau weiß, wie so etwas konkret umzusetzen ist, fallen mir da zwei wahrscheinlich mögliche Vorgehensweisen ein. Die erste Vorgehensweise die mir da einfällt ist, dass den beiden Controllern die selbe ObservableList übergeben wird und diese mit einem ChangeListener versehen werden. Die andere Möglichkeit die mir da einfallen würde, wäre, dass man in der zweiten Stage die Tabelle des ersten Stages mit dem FXMLLoader lädt und somit dann Zugriff auf diese hat. Falls ich richtig liegen sollte, würde ich mich über die konkrete Umsetzung für eines der beiden Vorgehensweisen freuen.


----------



## MoxxiManagarm (16. Aug 2018)

Ich empfehle dir für sowas einen neues Thread zu eröffnen. U.a. Ich bin eigentlich von 4-seiten-langen Threads total abgeschreckt ^^ Mit einem neuen unabhängigen Thread erhöhst du die Chance enorm, dass dir geholfen wird.


----------



## mu7ti (16. Aug 2018)

Hey, danke für deine schnelle Antwort. Wie genau müsste ich das denn dann machen ? Einen ScheduledService in der initialize()-Methode starten der dann durchgehend meine Tabelle aktualisiert? Wäre das denn auch die elegantere Vorgehensweise? Und wo müsste ich diesen Thread dann wieder schließen ?


----------



## httpdigest (16. Aug 2018)

Thread, nicht Thread.


----------



## mu7ti (16. Aug 2018)

Thread, nicht Thread??


----------



## Robat (16. Aug 2018)

Du sollst hier im Forum ein neuen, eigenen Thread (also eine eigenständige Frage/Post ) zu dem Thema aufmachen.


----------



## httpdigest (16. Aug 2018)

mu7ti hat gesagt.:


> Thread, nicht Thread??


Ja. Klick doch mal auf die Links


----------



## mu7ti (16. Aug 2018)

Von Conversation threading habe ich noch nie was gehört. Könntest du mir vll kurz erklären, was das genau macht? Und wie würde das in meinem Falle eingesetzt werden ?


----------



## mihe7 (16. Aug 2018)

mu7ti hat gesagt.:


> Und wie würde das in meinem Falle eingesetzt werden ?


@mu7ti Lies nochmal *genau*, was @Robat geschrieben hat.


----------



## mu7ti (16. Aug 2018)

Ok. Also die Frage nochmal unter dem Stichwort Thread posten?!


----------



## httpdigest (16. Aug 2018)

Wenn das hier ein Turing-Test wäre, hättest du ihn nicht bestanden.

Wenn du dich auf deine Frage https://www.java-forum.org/thema/prozessvisualisierung.182213/page-4#post-1160881 beziehst: Was soll denn diese Frage mit Thread zu tun haben? Du sollst eine neue Frage/neuen Beitrag erstellen und den natürlich möglichst nahe an dem eigentlichen Thema benennen.


----------



## mu7ti (16. Aug 2018)

Bin halt noch ziemlich neu hier und wusste daher nicht genau, wie Themen behandelt und kategorisiert werden.


----------

