チャットアプリのクライアントを作っています。
このソースのService<Boolean> service = new Service<>() {
というところでエラーが出てしまいました。
改善方法を教えてください。
package client;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Client extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
final String HOST = "localhost";
final int PORT = 1963;
Socket socket = new Socket(HOST, PORT);
InputStreamReader reader = new InputStreamReader(socket.getInputStream());
OutputStreamWriter writer = new OutputStreamWriter(socket.getOutputStream());
BorderPane rootPane = new BorderPane();
TextArea messageArea = new TextArea();
TextField inputField = new TextField();
Button sendButton = new Button("送信");
writer.write("name2" + "^");
writer.flush();
sendButton.setOnAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String inputMessage = inputField.getText();
try {
writer.write(inputMessage + "^");
writer.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
inputField.setText("");
inputField.requestFocus();
}
});
BorderPane inputPane = new BorderPane();
inputPane.setRight(sendButton);
inputPane.setCenter(inputField);
rootPane.setBottom(inputPane);
rootPane.setCenter(messageArea);
Scene scene = new Scene(rootPane, 680, 480);
scene.setFill(Color.BROWN);
stage.setTitle("Chat");
stage.setScene(scene);
Service<Boolean> service = new Service<>() {
@Override
protected Task<Boolean> createTask() {
Task<Boolean> task = new Task<>() {
@Override
protected Boolean call() throws Exception {
while(true) {
StringBuilder builder = new StringBuilder();
try {
for(int c = reader.read(); (char)c != '^'; c = reader.read()) {
builder.append((char)c);
}
} catch (IOException e) {
e.printStackTrace();
break;
}
Platform.runLater(() -> {
messageArea.appendText(builder.toString() + "\r\n");
});
}
return true;
}
};
return task;
}
};
service.start();
stage.show();
}
}
あなたの回答
tips
プレビュー