【问题标题】:javafx, hw do I get valus from main processjavafx,我如何从主进程中获取价值
【发布时间】:2018-11-05 07:43:57
【问题描述】:

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

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

【问题讨论】:

  • ReadSocket rs = new ReadSocket(bq, parameters.getText()); 是正确的

标签: java multithreading javafx producer-consumer


【解决方案1】:

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

}

【讨论】:

    猜你喜欢
    • 2021-03-16
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2018-04-07
    • 2021-12-26
    相关资源
    最近更新 更多