Java永无止境的开关循环(有时)eclipse
我完全被这一点弄糊涂了我在循环中有一个switch语句: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
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