JavaFXとWebsocketを連携してみる(On Glassfish4.0) その3

時系列のままに書いている間が漂ってきましたが。。。。

最初はボタンイベント(handleButtonAction)からjavafx.concurrent.Serviceをキックしていた。ただGrizzlyの中でWebsocket用のスレッドが立てられているので、「Websoketスレッド起動の処理」をスレッド化しても多分意味がないことに気づいた。少なくとも今問題になっている「Not on FX application thread」というやつの対策にはならなそう。

ボタンイベントから直接Websocket用のスレッド起動を行うように変更。

public class SampleController implements Initializable {

    @FXML
    private TableView<RowData> table;

    @FXML
    private TableColumn<RowData, String> column;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        try {
            CountDownLatch messageLatch = new CountDownLatch(1);
            URI clientURI = new URI("ws://localhost:8080/first/hello/");
            ClientManager cliContainer = org.glassfish.tyrus.client.ClientManager
                    .createClient();
            cliContainer.connectToServer(new WSClient(table), clientURI);
            messageLatch.await(1, TimeUnit.SECONDS);
        } catch (DeploymentException | URISyntaxException
                | InterruptedException ex) {
            Logger.getLogger(SampleController.class.getName()).log(
                    Level.SEVERE, null, ex);
        }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        table.setEditable(true);
        column.setResizable(true);
        column.setCellValueFactory(new PropertyValueFactory<RowData, String>(
                "message"));
    }
}

予定通りWebsocket(のスレッド)はキックされている。

a

 

@OnMessageでLabelの値に反映させる方法は調査中。 -> 動いた

それを皮切りに”ObservableList経由で反映しているTableView”以外もやっつけるつもりだったけどそもそもできるか不安になってきた。。。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です