図形のユーザー入力サイズが読み取られ、サーバーに返されるシンプルなクライアントサーバーGUIアプリケーションの作成中に、メソッドdrawShapeが呼び出された後、すべてが停止し、クライアントは(DIM x、y)を受け取ります。ou "1:描画点\ n2:円を描く\ n3 「長方形を描く」とこれは、出力先のサーバーには返されません(私は一言で試してみましたが)うまくいきませんでした。Java GUIアプリケーションでは、サーバーは最初の要求のみを読み取ります。
私は本当に何が問題なのか分かりません。私は数日間それを苦労しています。 私は値を解析し、スキャナを閉じ、スキャナをチェックし、ループをチェックしました... PrintWriterがOutputStreamレスポンスをサーバに送信しないのはなぜですか?
これはコードです:
public static final int TCP_PORT = 8000;
public SGPClientThread(Socket sock) throws IOException {
this.sock = sock;
in = new BufferedReader(new InputStreamReader(sock.getInputStream()),1);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())), true);
start();
}
ETFCanvas can = new ETFCanvas(450, 500);
public void run() {
Scanner scan = new Scanner(System.in);
System.out.println("Send new request by entering '<NEW>'");
String option = "";
option = scan.nextLine();
out.println("CONNECT##" + option);
String read = " ";
try {
read = in.readLine();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
if (read.startsWith("<DIM x,y>")) {
System.out.println("1:Draw point\n2:Draw circle\n3.Draw rectangle");
// SO FAR SO GOOD!
>問題が発生した場合は、何も私は がサーバーに送信されることはありません、プリントアウトしようと、それはこれをする必要はありませんされているコードに続いて、単に という単語や何かを単純に送信してみてください。
**int choice = scan.nextInt();
switch (choice) {
case 1:
System.out.println("Dimension and color of POINT:x1,y1,color");
System.out.println("Enter X: ");
x = scan.nextInt();
System.out.println("Enter Y: ");
y = scan.nextInt();
do {
try {
System.out.println(
"Enter Color value: ETFCanvas.COLOR_RED;ETFCanvas.COLOR_BLUE;ETFCanvas.COLOR_GREEN");
color = scan.nextInt();
} catch (InputMismatchException e) {
System.out.print("Invalid input ");
}
scan.nextLine(); // clears the buffer
} while (color <= 0);
scan.close();
String iks = String.valueOf(x);
String ipsilon = String.valueOf(y);
String kolor = String.valueOf(color);
out.println("<POINT x,y,c>##" + iks + "##" + ipsilon + "##" + kolor);
break;**
BLOCKQUOTE
と短いそれを維持するために、私はそれがサークルや四角形を描画するためだけのケース2及び3であるクライアントスレッドの残りの部分を掲示し、ソケットを閉じていませんでした。
ここは私のサーバースレッドコードです。
ETFCanvas can = new ETFCanvas(450, 500);
public ServerThread(Socket sock, int value) throws IOException {
this.sock = sock;
this.value = value;
// oos = new ObjectOutputStream(sock.getOutputStream());
// ois = new ObjectInputStream(sock.getInputStream());
in = new BufferedReader(new InputStreamReader(sock.getInputStream()),1);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())), true);
start();
}
@Override
public void run() {
String line = "";
//
try {
line = in.readLine();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//
if (line.startsWith("CONNECT##")) {
System.out.println("User sent request " + sock.getRemoteSocketAddress().toString() + line);
String[] content = line.split("##");
req = content[1];
if (req.equals("<NEW>")) {
out.println("<DIM x,y>");
}
} else {
System.out.println("Bad request [" + sock.getRemoteSocketAddress().toString() + "]: " + line);
>この部分ティルそれは魔法のように働いている、そしてそれはあなたが読んで、サーバーコードで
}
if (line.startsWith("<POINT x,y,c>##")) {
System.out.println("User sent request TRY" + sock.getRemoteSocketAddress().toString() + line);
String[] dim = line.split("##");
String dimX = dim[1];
String dimY = dim[2];
String dimC = dim[3];
int x = Integer.parseInt(dimX);
int y = Integer.parseInt(dimY);
int c = Integer.parseInt(dimC);
can.drawPoint(x, y, ETFCanvas.COLOR_RED);
} else if (line.startsWith("<CIRCLE x,y,r,boja>##")) {
String[] dim = line.split("##");
String dimX = dim[1];
String dimY = dim[2];
String dimR = dim[3];
String dimC = dim[4];
int x = Integer.parseInt(dimX);
int y = Integer.parseInt(dimY);
int r = Integer.parseInt(dimR);
int c = Integer.parseInt(dimC);
can.drawCircle(x, y, r, ETFCanvas.COLOR_RED);
} else if (line.startsWith("<RECTANGLE x,y,w,h,boja>##")) {
String[] dim = line.split("##");
String dimX = dim[1];
String dimY = dim[2];
String dimW = dim[3];
String dimH = dim[4];
String dimC = dim[5];
int x = Integer.parseInt(dimX);
int y = Integer.parseInt(dimY);
int w = Integer.parseInt(dimW);
int h = Integer.parseInt(dimH);
int c = Integer.parseInt(dimC);
can.drawRect(x, y, w, h, ETFCanvas.COLOR_RED);
;
try {
in.close();
out.close();
sock.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
クラフトとあなたの問題の[MCVE]バージョンを掲載ご検討ください。 –