回答編集履歴
1
2番目の問題について追記しました。
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
1番目の問題について。
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
`NetSendMessageTask`クラスの「データの送信」コメントの次の行で、`getMessage`メソッドを使用していますが、このメソッドはJavaFXアプリケーションスレッドからしかアクセスできない仕組みになっています。
|
2
6
|
|
3
7
|
試しに、`getMessage`メソッドの行をtry-catchで囲んでみてください。
|
@@ -29,3 +33,41 @@
|
|
29
33
|
さて、テキストフィールドの値を`Task`に渡すには、どのような方法が適切かがちょっと分からないのですが、
|
30
34
|
|
31
35
|
`NetSendMessageTask`クラスにテキストフィールドの`StringProperty`を渡してしまって、そこからメッセージを取得すれば一応動作します。
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
---
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
(追記)
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
2番目の問題について。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
意図しない処理になるかもしれませんが、とりあえずは以下をやってみてください。
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
- `NetSendMessageTask`の`call`メソッドの`while`を`if`に変更(応答を待っていないので無限ループになる)
|
56
|
+
|
57
|
+
- `NetSendMessageTask`の`call`メソッドの`updateMessage("");`を`messageProp.set("");`に変更(`messageProp`はテキストフィールドの`StringProperty`)
|
58
|
+
|
59
|
+
- `handleButtonSendMessageAction`の`sendMessage.textProperty().bind(taskSendMessage.messageProperty());`を削除(使っていないので)
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
なぜタスクとテキストフィールドのバインドが上手く行かないのかは、勉強不足のため分かりませんでした。
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
...
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
ループで処理するとしたら、サーバーとはデータをキャッチボールのようにやりとりしないといけないので、ソケットの入力と出力を別々のタスクにせず、できれば、メッセージを送ったらサーバーの応答を待つようなロジックにしたほうが良いと思います。
|
72
|
+
|
73
|
+
|