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);
}
}
这基本上是一个简单的生产者-消费者应用程序。 代码示例如下:
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);
}
}