javafx, hw я получу valus от основного процесса - PullRequest
0 голосов
/ 05 ноября 2018

Это в основном простой производитель - потребительское приложение. Пример кода следующий:

public class MyMainClass extends Application {

    // blocking queue that will be shared among my prcesses
    BlockingQueue bq;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");

        // parameters I wont the Thread passes to the server socket
        TextArea parameters = new TextArea("parameters-for-the-server");

        // setting the Producer button
        Button btnProducer = new Button();
        btnProducer.setText("Start Producer");
        btnProducer.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {

              /* ReadSocket connects to a web sockets, 
                reads strings and saves them into a shared blocking queue: bq*/
                ReadSocket rs = new ReadSocket(bq);
                new Thread(rs).start();
            }
            // setting the Consumer button
            Button btnConsumer = new Button();
            btnConsumer.setText("Start Consumer");
            btnConsumer.setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent event) {

                  /* ReadSocket connects to a web sockets, 
                    reads strings and saves them into a shared blocking queue: bq*/
                    Consumer c = new Consumer(bq);
                    new Thread(c).start();
                }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

Мой профессор сказал, что я должен передать значения в конструкторе, если я хочу, чтобы они были доступны другим объектам.

Мой ReadSocket должен выглядеть примерно так:

public class ReadSocket{
  BlockingQueue bq;

  ReadSocket(bq){
    this.bq = bq;
    // more code
  }
    /*I need here parameters in order to create an object o 
    that will be used to create another object ms*/
    MyObject o = new MyObjext("parameters-for-the-server");
    MyServer ms = new MyServer(o);
}

Значит ли это, что я должен передать свои значения вроде:

ReadSocket rs = new ReadSocket(bq, parameters.getText()); даже если ReadSocket не использует их напрямую, но создает объект на основе parameters? Это правильно делать? Есть ли другой лучший способ?

1 Ответ

0 голосов
/ 05 ноября 2018

Есть два способа сделать это. Один использует constructor, а другой - setter method. Но, как вы упомянули, ваш профессор предложил вам передавать параметры с помощью конструктора, чтобы эти параметры были доступны другим объектам.

Просто убедитесь, что вы храните ссылку на параметры, переданные через конструктор

public class ReadSocket{

  BlockingQueue bq;
  String parameters;

  ReadSocket(BlockingQueue bq, String parameters)
  {
    this.bq = bq;
    this.parameters = parameters;

  }

  private void createOtherObjects()
  {
    MyObject o = new MyObjext(this.parameters);
    MyServer ms = new MyServer(o);
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...