diff --git a/build/built-jar.properties b/build/built-jar.properties
index cc2d0f4..60614ec 100644
--- a/build/built-jar.properties
+++ b/build/built-jar.properties
@@ -1,4 +1,4 @@
-#Fri, 09 Aug 2019 06:24:54 +0200
+#Fri, 09 Aug 2019 06:29:16 +0200
D\:\\Git-Repos\\java-fx-8-samples=
diff --git a/build/classes/chatspammer/Layout.fxml b/build/classes/chatspammer/Layout.fxml
new file mode 100644
index 0000000..4ae52f9
--- /dev/null
+++ b/build/classes/chatspammer/Layout.fxml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/classes/chatspammer/LayoutController$MyLoop.class b/build/classes/chatspammer/LayoutController$MyLoop.class
new file mode 100644
index 0000000..26124e8
Binary files /dev/null and b/build/classes/chatspammer/LayoutController$MyLoop.class differ
diff --git a/build/classes/chatspammer/LayoutController.class b/build/classes/chatspammer/LayoutController.class
new file mode 100644
index 0000000..4173ad2
Binary files /dev/null and b/build/classes/chatspammer/LayoutController.class differ
diff --git a/build/classes/chatspammer/Main.class b/build/classes/chatspammer/Main.class
new file mode 100644
index 0000000..6da576d
Binary files /dev/null and b/build/classes/chatspammer/Main.class differ
diff --git a/build/classes/utils/Runner.class b/build/classes/utils/Runner.class
index 32471b9..1fbbdb9 100644
Binary files a/build/classes/utils/Runner.class and b/build/classes/utils/Runner.class differ
diff --git a/dist/java-fx-8-samples.html b/dist/java-fx-8-samples.html
index f8be0dc..12b19cd 100644
--- a/dist/java-fx-8-samples.html
+++ b/dist/java-fx-8-samples.html
@@ -4,7 +4,7 @@
function launchApplication(jnlpfile) {
dtjava.launch( {
url : 'java-fx-8-samples.jnlp',
- jnlp_content : 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxqbmxwIHNwZWM9IjEuMCIgeG1sbnM6amZ4PSJodHRwOi8vamF2YWZ4LmNvbSIgaHJlZj0iamF2YS1meC04LXNhbXBsZXMuam5scCI+DQogIDxpbmZvcm1hdGlvbj4NCiAgICA8dGl0bGU+amF2YS1meC04LXNhbXBsZXM8L3RpdGxlPg0KICAgIDx2ZW5kb3I+bXNjaHc8L3ZlbmRvcj4NCiAgICA8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+DQogICAgPG9mZmxpbmUtYWxsb3dlZC8+DQogIDwvaW5mb3JtYXRpb24+DQogIDxyZXNvdXJjZXM+DQogICAgPGoyc2UgdmVyc2lvbj0iMS42KyIgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9hdXRvZGwvajJzZSIvPg0KICAgIDxqYXIgaHJlZj0iamF2YS1meC04LXNhbXBsZXMuamFyIiBzaXplPSIyMDMzMzgiIGRvd25sb2FkPSJlYWdlciIgLz4NCiAgPC9yZXNvdXJjZXM+DQogIDxqZng6amF2YWZ4LWRlc2MgIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIiBtYWluLWNsYXNzPSJ1dGlscy5SdW5uZXIiICBuYW1lPSJqYXZhLWZ4LTgtc2FtcGxlcyIgLz4NCiAgPHVwZGF0ZSBjaGVjaz0iYWx3YXlzIi8+DQo8L2pubHA+DQo='
+ jnlp_content : 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxqbmxwIHNwZWM9IjEuMCIgeG1sbnM6amZ4PSJodHRwOi8vamF2YWZ4LmNvbSIgaHJlZj0iamF2YS1meC04LXNhbXBsZXMuam5scCI+DQogIDxpbmZvcm1hdGlvbj4NCiAgICA8dGl0bGU+amF2YS1meC04LXNhbXBsZXM8L3RpdGxlPg0KICAgIDx2ZW5kb3I+bXNjaHc8L3ZlbmRvcj4NCiAgICA8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+DQogICAgPG9mZmxpbmUtYWxsb3dlZC8+DQogIDwvaW5mb3JtYXRpb24+DQogIDxyZXNvdXJjZXM+DQogICAgPGoyc2UgdmVyc2lvbj0iMS42KyIgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9hdXRvZGwvajJzZSIvPg0KICAgIDxqYXIgaHJlZj0iamF2YS1meC04LXNhbXBsZXMuamFyIiBzaXplPSIyMDc4ODIiIGRvd25sb2FkPSJlYWdlciIgLz4NCiAgPC9yZXNvdXJjZXM+DQogIDxqZng6amF2YWZ4LWRlc2MgIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIiBtYWluLWNsYXNzPSJ1dGlscy5SdW5uZXIiICBuYW1lPSJqYXZhLWZ4LTgtc2FtcGxlcyIgLz4NCiAgPHVwZGF0ZSBjaGVjaz0iYWx3YXlzIi8+DQo8L2pubHA+DQo='
},
{
javafx : '8.0+'
@@ -24,7 +24,7 @@
placeholder : 'javafx-app-placeholder',
width : '800',
height : '600',
- jnlp_content : 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxqbmxwIHNwZWM9IjEuMCIgeG1sbnM6amZ4PSJodHRwOi8vamF2YWZ4LmNvbSIgaHJlZj0iamF2YS1meC04LXNhbXBsZXMuam5scCI+DQogIDxpbmZvcm1hdGlvbj4NCiAgICA8dGl0bGU+amF2YS1meC04LXNhbXBsZXM8L3RpdGxlPg0KICAgIDx2ZW5kb3I+bXNjaHc8L3ZlbmRvcj4NCiAgICA8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+DQogICAgPG9mZmxpbmUtYWxsb3dlZC8+DQogIDwvaW5mb3JtYXRpb24+DQogIDxyZXNvdXJjZXM+DQogICAgPGoyc2UgdmVyc2lvbj0iMS42KyIgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9hdXRvZGwvajJzZSIvPg0KICAgIDxqYXIgaHJlZj0iamF2YS1meC04LXNhbXBsZXMuamFyIiBzaXplPSIyMDMzMzgiIGRvd25sb2FkPSJlYWdlciIgLz4NCiAgPC9yZXNvdXJjZXM+DQogIDxqZng6amF2YWZ4LWRlc2MgIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIiBtYWluLWNsYXNzPSJ1dGlscy5SdW5uZXIiICBuYW1lPSJqYXZhLWZ4LTgtc2FtcGxlcyIgLz4NCiAgPHVwZGF0ZSBjaGVjaz0iYWx3YXlzIi8+DQo8L2pubHA+DQo='
+ jnlp_content : 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxqbmxwIHNwZWM9IjEuMCIgeG1sbnM6amZ4PSJodHRwOi8vamF2YWZ4LmNvbSIgaHJlZj0iamF2YS1meC04LXNhbXBsZXMuam5scCI+DQogIDxpbmZvcm1hdGlvbj4NCiAgICA8dGl0bGU+amF2YS1meC04LXNhbXBsZXM8L3RpdGxlPg0KICAgIDx2ZW5kb3I+bXNjaHc8L3ZlbmRvcj4NCiAgICA8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+DQogICAgPG9mZmxpbmUtYWxsb3dlZC8+DQogIDwvaW5mb3JtYXRpb24+DQogIDxyZXNvdXJjZXM+DQogICAgPGoyc2UgdmVyc2lvbj0iMS42KyIgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9hdXRvZGwvajJzZSIvPg0KICAgIDxqYXIgaHJlZj0iamF2YS1meC04LXNhbXBsZXMuamFyIiBzaXplPSIyMDc4ODIiIGRvd25sb2FkPSJlYWdlciIgLz4NCiAgPC9yZXNvdXJjZXM+DQogIDxqZng6amF2YWZ4LWRlc2MgIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIiBtYWluLWNsYXNzPSJ1dGlscy5SdW5uZXIiICBuYW1lPSJqYXZhLWZ4LTgtc2FtcGxlcyIgLz4NCiAgPHVwZGF0ZSBjaGVjaz0iYWx3YXlzIi8+DQo8L2pubHA+DQo='
},
{
javafx : '8.0+'
diff --git a/dist/java-fx-8-samples.jar b/dist/java-fx-8-samples.jar
index 1ae018f..e8567db 100644
Binary files a/dist/java-fx-8-samples.jar and b/dist/java-fx-8-samples.jar differ
diff --git a/dist/java-fx-8-samples.jnlp b/dist/java-fx-8-samples.jnlp
index cb1a78a..03cc518 100644
--- a/dist/java-fx-8-samples.jnlp
+++ b/dist/java-fx-8-samples.jnlp
@@ -8,7 +8,7 @@
-
+
diff --git a/src/chatspammer/Layout.fxml b/src/chatspammer/Layout.fxml
new file mode 100644
index 0000000..4ae52f9
--- /dev/null
+++ b/src/chatspammer/Layout.fxml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/chatspammer/LayoutController.java b/src/chatspammer/LayoutController.java
new file mode 100644
index 0000000..937b9f2
--- /dev/null
+++ b/src/chatspammer/LayoutController.java
@@ -0,0 +1,115 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package chatspammer;
+
+import java.awt.AWTException;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.KeyEvent;
+import java.net.URL;
+import java.util.ResourceBundle;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.ProgressIndicator;
+import javafx.scene.control.Slider;
+import javafx.scene.control.TextField;
+
+/**
+ *
+ * @author mschw
+ */
+public class LayoutController implements Initializable {
+
+ //Variables
+ Robot robot;
+ MyLoop spammer = new MyLoop(10);
+ volatile boolean shouldRun = false;
+
+ @FXML
+ private TextField tfSpamtext;
+ @FXML
+ private Slider slSpamDelay;
+ @FXML
+ private Button btnStart;
+ @FXML
+ private Button btnStop;
+ @FXML
+ private ProgressIndicator piRunning;
+ @FXML
+ private Label lblRunning;
+
+ @Override
+ public void initialize(URL url, ResourceBundle rb) {
+ try {
+ robot = new Robot();
+ } catch (AWTException ex) {
+ System.err.println("Robot konnte nicht erstellt werden");
+ }
+ changeProgress(false);
+ }
+
+ @FXML
+ private void handleStart(ActionEvent event) {
+ if (!tfSpamtext.getText().isEmpty()) {
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(tfSpamtext.getText()), null);
+ if (slSpamDelay.getValue() < 10) {
+ spammer = new MyLoop(10);
+ } else {
+ spammer = new MyLoop((int) slSpamDelay.getValue());
+ }
+ shouldRun = true;
+ spammer.start();
+ changeProgress(true);
+ }
+
+ }
+
+ @FXML
+ private void handleStop(ActionEvent event) {
+ if (spammer != null) {
+ shouldRun = false;
+ spammer = null;
+ changeProgress(false);
+ }
+ }
+
+ private void changeProgress(boolean b) {
+ piRunning.setVisible(b);
+ lblRunning.setVisible(b);
+ }
+
+ private class MyLoop extends Thread {
+
+ final int delay;
+
+ public MyLoop(int delay) {
+ this.delay = delay;
+ }
+
+ @Override
+ public void run() {
+ while (shouldRun) {
+ try {
+ robot.keyPress(KeyEvent.VK_CONTROL);
+ robot.keyPress(KeyEvent.VK_V);
+
+ robot.keyRelease(KeyEvent.VK_CONTROL);
+ robot.keyRelease(KeyEvent.VK_V);
+
+ robot.keyPress(KeyEvent.VK_ENTER);
+ robot.keyRelease(KeyEvent.VK_ENTER);
+ sleep(delay);
+ } catch (InterruptedException ex) {
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/chatspammer/Main.java b/src/chatspammer/Main.java
new file mode 100644
index 0000000..0ab932c
--- /dev/null
+++ b/src/chatspammer/Main.java
@@ -0,0 +1,49 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package chatspammer;
+
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+import utils.JFXUtil;
+
+/**
+ *
+ * @author mschw
+ */
+public class Main extends Application {
+
+ @Override
+ public void start(Stage stage) {
+ Parent root = null;
+ try {
+ root = FXMLLoader.load(getClass().getResource("Layout.fxml"));
+ } catch (IOException ex) {
+ Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ Scene scene = new Scene(root);
+ stage.setResizable(false);
+
+ stage.setOnCloseRequest(JFXUtil::stopAllThreadsOnWindowClose);
+
+ stage.setScene(scene);
+ stage.show();
+ }
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String[] args) {
+ launch(args);
+ }
+
+}
diff --git a/src/utils/Runner.java b/src/utils/Runner.java
index e6cb75a..ad53d5e 100644
--- a/src/utils/Runner.java
+++ b/src/utils/Runner.java
@@ -140,6 +140,10 @@ public class Runner extends Application{
btn20.setOnAction(event -> new taschenrechnerkomma.Main().start(new Stage()));
gridpane.add(btn20, 1, 9);
+ Button btn24 = new Button("Start Chat Spammer");
+ btn24.setOnAction(event -> new chatspammer.Main().start(new Stage()));
+ gridpane.add(btn24, 2, 9);
+
ScrollPane root = new ScrollPane(gridpane);
Scene scene = new Scene(root, 600, 400);