Java永无止境的开关循环(有时)eclipse

Java永无止境的开关循环(有时)eclipse,java,for-loop,switch-statement,Java,For Loop,Switch Statement,我完全被这一点弄糊涂了我在循环中有一个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

我完全被这一点弄糊涂了我在循环中有一个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之外,一切正常,它们导致程序永远循环,直到我点击eclipse,然后它停止。这不是eclipse的问题,因为当我将它构建到一个.jar中时,我得到了相同的结果,这不是服务器的问题,因为当我制作发送90Send7的按钮时,它工作正常

似乎只有90-93导致了无限循环,我已经尝试将数字从90改为200左右,但没有运气

有启蒙运动的人吗?

听起来像这样的代码:

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

因为某种原因被绞死了。与switch语句无关。

好了,伙计们,我明白了。你不会相信这个的

我的服务器是一个虚拟的安卓设备——我想制作一个远程键盘应用程序,所以我编写了服务器,将虚拟键盘上的每个按键发送给客户端,客户端将在我的计算机上模拟我的按键

问题出在哪里?成功了。我的客户端将在我的计算机上模拟一个按键,然后在我的android emulator上模拟一个按键(如果你按下键盘上的一个键,它就会按下android键盘上的那个键),它会将按键发送给客户端再次按下该键,从而创建一个无限循环

这解释了为什么当我关注eclipse窗口而不是android窗口时,服务器停止接收数字,而android设备停止接收按键


非常感谢你们的帮助,尽管非常感谢

最好记录/打印try catch中抛出的异常信息
e.toString()
只返回包含异常信息的字符串,但您必须在某个地方使用它。您的
System.out.println(键)是否正确行显示正确的
readInt()
值?@doublesharp这太疯狂了,它输出正确的数字,然后开始输出另一个数字-这是当我发送90时的捕捉,它按下1,然后开始连续读取8作为输入,同时按下1