如何将Java / KDB程序的控制台输出重定向到GUI TextField

时间:2018-01-23 22:27:57

标签: java user-interface javafx

免责声明:

  

特殊的KDB知识是不必要的。
  我意识到有一些类似的问题,但没有一个解决方案对我有用。我在这里遇到类似问题的情况略有不同。
  如果我错过了您需要的任何信息,我深表歉意。问我和我会给你尽可能多的信息。

我有一个包含3个类的Java应用程序,但只有2个是相关的,因为3rd是由kx创建的API,称为' Fusion'。

基本上,应用程序查询KDB数据库,该数据库每秒返回一个交易表的最后一行。该表不断被feed修改。我让它返回最后一行,我将它打印到控制台。但我需要将其打印在JavaFX textFieldtextArea中。我创建Java GUI并不是那么出色,因为我的工作通常不需要我制作它们。我觉得这比听起来要难一点。

我的ConnectionToKDB类负责打印到控制台,但我需要将它打印的内容发送到主类JavaFXToKDB中的GUI。我一直在想必须有办法将控制台输出重定向到textfield中的GUI组件JavaFXToKDB.java

另一个想法是将翻转代码的输出存储到字符串数组列表中,并使textfield以某种方式访问​​它。我真的可以对此提出一些建议。控制台打印也发生在代码块中,您可以在其中看到我访问翻转功能并访问rowscolumns。如果您想查看翻转函数,可以找到Fusion API here的类。

JavaFxToKDB.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import java.lang.*;
import javafx.geometry.Insets;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;


public class JavaFxToKdb extends Application {

    @Override
    public void start(Stage primaryStage) {

        TextField textfield = new TextField();
        Button btn = new Button();
        btn.setText("Show me the last Trade Record");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        VBox vbox = new VBox();
        vbox.getChildren().addAll(textfield,btn);
        vbox.setSpacing(10);
        vbox.setPadding(new Insets(40,40,40,40));
        Scene scene = new Scene(vbox, 600, 500);

        primaryStage.setTitle("KDB Connector");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


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


/*
Instance of the class containing the method which connects to the KDB Process and queries the process table
        */
        ConnectionToKDB varConnect = new ConnectionToKDB();
        //varConnect.ConnectToKDB();
    }



}

ConnectionToKDB.java

import java.io.IOException;
import java.util.Calendar;


public class ConnectionToKDB {

    public ConnectionToKDB(){}

   public void ConnectToKDB(){
    //c connection = null;
        // 1) create a java calendar instance
        Calendar calendar = Calendar.getInstance();
        // 2) get a java.util.Date from the calendar instance.
        //    this date will represent the current instant, or "now".
        java.util.Date now = calendar.getTime();
        // 3) a java current time (now) instance
        java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(now.getTime());
        try{
        c connection=new c("localhost",6002,"admin:admin");

        boolean run = true; //While true the application will continue to query the kdb process (RDB or TP depending on port)
        while(run){


        //System.out.println("Received "+ Arrays.deepToString(objectFeedArray));
        //System.out.println("Recieved" + connection.k("-1#trade"));

/*
Prints the returned table row with column names and row data
*/
        c.Flip flip = (c.Flip)connection.k("-1#trade");
        for(int col=0;col<flip.x.length;col++)
          System.out.print((col>0?",":"")+flip.x[col]);
        System.out.println();
        for(int row=0;row<c.n(flip.y[0]);row++){
          for(int col=0;col<flip.x.length;col++)
            System.out.print((col>0?",":"")+c.at(flip.y[col],row));
            System.out.println();
        }
        //run = false;
        Thread.sleep(1000); // Prevents duplicate rows produced due to querying the rdb multiple times before a new 'last row' was generated
        //System.out.println(connection.k("2+4")); //Test connection to kdb process
        }
        //connection.close();

        }
        catch(c.KException ke){
            System.out.println("Oops"); 
        }
        catch(IOException io){
            System.out.println("Oops2");
        }
        catch(InterruptedException ie){
            System.out.println("Oops3");
        }
        System.exit(0);
   }
}

0 个答案:

没有答案