javafx,我如何从主进程中获取价值

javafx, hw do I get valus from main process

这基本上是一个简单的生产者-消费者应用程序。 代码示例如下:

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 创建了一个对象?这样做正确吗? 还有其他更好的方法吗?

有两种方法可以做到这一点。一个使用 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);
  }

}