私はメジャープロジェクトのためにしばらくの間ソケットプログラミングを行ってきました。ここや他のブログからたくさん読んだ後、なんとかTableViewを作成しました。しかし、問題は私が TableView の API にあまり詳しくないことです。そのため、これは私にとって少し問題です。
public class Server implements Runnable {
ServerSocket sersock;
Socket sock;
@Override
public void run() {
try {
sersock = new ServerSocket(9000);
while (true) {
sock = sersock.accept();
new Thread(new client_handler(sock)).start();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public class client_handler implements Runnable { //Inner class.
Socket sock;
DataInputStream dis;
DataOutputStream dos;
String ip;
public client_handler(Socket sock) {
this.sock = sock;
}
public client_handler(String ip) {
this.ip = ip;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
@Override
public void run() {
try {
dis = new DataInputStream(sock.getInputStream());
dos = new DataOutputStream(sock.getOutputStream());
ip = sock.getInetAddress().getHostAddress();
System.out.println(ip);
al.add(this);
data.add(this);
} catch (Exception e) {
data.remove(this);
}
}
}
}
これは初期化の一部です
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
iptracker.setCellValueFactory(new PropertyValueFactory<>("ip"));
data = FXCollections.observableArrayList();
tableView.setItems(data);
}
そして、これが私の宣言です
@FXML
private TableView<Server.client_handler> tableView;
@FXML
private TableColumn iptracker;
ObservableList<Server.client_handler> data;
今私が欲しいのは、接続が確立された場合(もちろん確立されます)、
パラメータとしてclient_handler
呼び出されることです。sock
ここで、この靴下を IP アドレスとして TableView に追加します。しかし、方法がわかりません。
さらに、this
接続が反対側から切断されたときにオブジェクトを削除するにはどうすればよいですかcatch(Exception e)
?
後で、リスト全体をストリーム経由で他のクライアントに送信したいと考えています。では、明らかに1列しかないTableViewのすべての行をどのようにトラバースできますか。
今回は悪い投稿ではないことを願っています。:p
ObservableList<> は ArrayList とは異なることは知っていますが、このプロジェクトでは Swings から移植しようとしているので、jTable は ArrayList とうまく連携します。