2017-11-02 1 views
-1

Ich mache Twitch Chat mit Twitch API Wrapper und JavaFx. Aber ich habe ein Problem mit der Übergabe von Parametern, wenn ich eine Nachricht im Chat bekomme. Ich habe einen Thread gemacht. Es sollte so funktionieren:Parameter zwischen 2 Klassen übergeben. Javafx

  • 1) Ein Programm startet
  • 2) Start neue "Aufgabe" (new Thread in main-Methode) einen Bot
  • 3) Abrufen einer Nachricht über onMessage Methode zu starten
  • 4)

Das Problem, das Etikett zu dem Nachrichtentext zu ändern, ist, dass ich nicht verstehen kann, wie Nachricht String aus onMessage Methode Controller zu übergeben, so kann ich die Text der Bezeichnung ändern.

Hier ist der Code:

Bot Klasse:

public class Bot extends TwitchBot { 
    public Bot() { 

    } 

    public static String message2; 
    @Override 
    public void onMessage(User user, Channel channel, String message) throws IOException { 

     System.out.println("Message is:" + message); 
     setMessage2(message); 

    } 

    private void setMessage2(String message) { 
     message2 = message; 
    } 
} 

Controller.java

public class Controller implements Initializable { 

    @FXML private Label labelChat; 
    @FXML private TextArea textArea; 
    @FXML private GridPane gridPane; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 

     System.out.println("MADE"); 


    } 

    public void messagePrint(String message) { 
     System.out.println("LABEL!!!"); 
     labelChat.setText(message); 

    } 
} 

Main.java

public class Main extends Application { 

    public static Controller c; 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 

     System.out.println("Launched"); 
//  Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); 

     FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml")); 
     Parent root = loader.load(); 
     Controller c = loader.getController(); 
     Main.c = c; 


     primaryStage.setTitle("Hello World"); 





     primaryStage.setScene(new Scene(root, 450, 550)); 
     primaryStage.show(); 




    } 


    public static void main(String[] args) { 
     TwitchBot bot = new Bot(); 
     bot.connect(); 
     bot.joinChannel("#artek_tv"); 

     Task task = new Task() { 
      @Override 
      protected Object call() throws Exception { 

       bot.start(); 
       return null; 
      } 
     }; 

     new Thread(task).start(); 


     Task task2 = new Task() { 
      @Override 
      protected Object call() throws Exception { 

       c.messagePrint(Bot.message2); 
       return null; 
      } 
     }; 
     new Thread(task2).start(); 

     launch(args); 

    } 
} 
+2

Sie könnten diese api Schlüssel entfernen möchten ... – corsiKa

+0

Aber sie arbeiten, ich brauche nur irgendwie Dinge richtig machen mit javafx –

+1

Ich glaube, Sie missverstehen mich - Sie wollen nicht, dass jemand Ihre API-Schlüssel stehlen !! – corsiKa

Antwort

-1

Sie versuchen, die Nachricht mit setMessage2() richtig einzustellen? Warum greifen Sie nicht Label labelChat in diesem Verfahren und setzen Sie Text mit Platform.runLater(Runnable)

+0

können Sie meinen Code bitte reparieren? –

+0

'private void setMessage2 (String message) { \t Platform.runLater (() -> { \t \t \t Class-obj.labelChat.setText (Nachricht); \t}); } 'und make' @FXML private Label labelChat; 'zu' @FXML public Label labelChat; ' –

+0

Es besagt, dass nicht statische Variable labelChat von einem statischen Kontext aus referenziert werden kann –

Verwandte Themen