4

これに完全に戸惑っています。ループ内にswitchステートメントがあります。

package com.example.project

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Keyserver {
static ServerSocket server;
static Socket soc;
static ObjectInputStream in;
static int key;
static Robot bot;
static boolean shift = false;

public static void main(String[] args) throws AWTException{
    bot = new Robot();
    while(true){
        try {
            server = new ServerSocket(4321, 10);
            soc = server.accept();
            System.out.println("Accepted port");
            in = new ObjectInputStream(soc.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        while(soc.isConnected()){
            try {
                key = in.readInt();
                System.out.println(key);
                switch(key){
                case(7):
                    bot.keyPress(KeyEvent.VK_0);
                    bot.keyRelease(KeyEvent.VK_0);
                    break;
                case(8):
                    bot.keyPress(KeyEvent.VK_1);
                    bot.keyRelease(KeyEvent.VK_1);
                    break;
                case(9):
                    bot.keyPress(KeyEvent.VK_2);
                    bot.keyRelease(KeyEvent.VK_2);
                    break;
                case(10):
                    bot.keyPress(KeyEvent.VK_3);
                    bot.keyRelease(KeyEvent.VK_3);
                    break;
                                    ....
                case(53):
                    bot.keyPress(KeyEvent.VK_Y);
                    bot.keyRelease(KeyEvent.VK_Y);
                    break;
                case(54):
                    bot.keyPress(KeyEvent.VK_Z);
                    bot.keyRelease(KeyEvent.VK_Z);
                    break;
                case(4):
                    bot.keyPress(KeyEvent.VK_BACK_SPACE);
                    bot.keyRelease(KeyEvent.VK_BACK_SPACE);
                    break;
                case(62):
                    bot.keyPress(KeyEvent.VK_SPACE);
                    bot.keyRelease(KeyEvent.VK_SPACE);
                    break;
                case(59):
                    if(!shift){
                        bot.keyPress(KeyEvent.VK_SHIFT);
                    }else{
                        bot.keyRelease(KeyEvent.VK_SHIFT);
                    }
                    shift = !shift;
                    break;
                case(60):
                    if(!shift){
                        bot.keyPress(KeyEvent.VK_SHIFT);
                    }else{
                        bot.keyRelease(KeyEvent.VK_SHIFT);
                    }
                    shift = !shift;
                    break;

                case(90):
                    bot.keyPress(KeyEvent.VK_1);
                    bot.keyRelease(KeyEvent.VK_1);
                    break;
                case(91):
                    bot.keyPress(KeyEvent.VK_2);
                    bot.keyRelease(KeyEvent.VK_2);
                    break;
                case(92):
                    bot.keyPress(KeyEvent.VK_0);
                    bot.keyRelease(KeyEvent.VK_0);
                    break;
                case(93):
                    bot.keyPress(KeyEvent.VK_3);
                    bot.keyRelease(KeyEvent.VK_3);
                    break;
                case(104):
                    bot.keyPress(KeyEvent.VK_ENTER);
                    bot.keyRelease(KeyEvent.VK_ENTER);
                    break;
                case(105):
                    bot.keyPress(KeyEvent.VK_BACK_SPACE);
                    bot.keyRelease(KeyEvent.VK_BACK_SPACE);
                    break;
                case(106):
                    bot.keyPress(KeyEvent.VK_MINUS);
                    bot.keyRelease(KeyEvent.VK_MINUS);
                    break;
                case(107):
                    bot.keyPress(KeyEvent.VK_EQUALS);
                    bot.keyRelease(KeyEvent.VK_EQUALS);
                    break;
                case(108):
                    bot.keyPress(KeyEvent.VK_TAB);
                    bot.keyRelease(KeyEvent.VK_TAB);
                    break;
                case(109):
                    bot.keyPress(KeyEvent.VK_ESCAPE);
                    bot.keyRelease(KeyEvent.VK_ESCAPE);
                    break;
            }

            } catch (IOException e) {
                try {
                    e.toString();
                    in.close();
                    soc.close();
                    server.close();
                    break;
                } catch (IOException e1) {
                    e1.toString();
                }   
            }
        }
        System.out.println("PORT CLOSED");
    }

}

}

90-93を除いて、すべて正常に動作します。日食をクリックして停止するまで、プログラムは永久にループします。.jarにビルドすると同じ結果が得られ、サーバーの問題ではないため、日食の問題ではありません。90send 7を送信するボタンを作成すると、問題なく機能したためです。

90-93だけが無限ループを引き起こすようです、私はすでに数値を90から200のようなものに変更しようとしましたが、運がありません

悟りの人はいますか?

4

2 に答える 2

0

わかりました、私はそれを理解しました。あなたはこれを信じるつもりはありません。

私のサーバーは仮想Androidデバイスです-リモートキーボードアプリを作成したかったので、サーバーを作成して、仮想キーボードのすべてのキープレスをクライアントに送信し、クライアントがコンピューターでキープレスをエミュレートしました。

問題?出来た。私のクライアントは私のコンピューターでキープレスをエミュレートし、次に私のAndroidエミュレーターでキープレスをエミュレートします(キーボードのキーを押すと、Androidキーボードのそのキーを押します)、キープレスをクライアントに送信してキーをもう一度押します、無限ループを作成します。

Androidデバイスがキープレスの受信を停止したため、AndroidウィンドウではなくEclipseウィンドウに焦点を合わせたときに、サーバーが番号の受信を停止した理由を説明しています

大変感謝していますが、皆さんの助けに感謝します

于 2012-09-25T03:18:35.990 に答える
0

次のコードのように聞こえます。

bot.keyPress(KeyEvent.VK_1);
bot.keyRelease(KeyEvent.VK_1);

何らかの理由でハングしています。switch ステートメントとは関係ありません。

于 2012-09-24T03:24:55.313 に答える