Java bluetooth与jssc的连接-密钥侦听器出现问题

Java bluetooth与jssc的连接-密钥侦听器出现问题,java,swing,bluetooth,jssc,Java,Swing,Bluetooth,Jssc,我正在尝试制作一个应用程序,通过蓝牙将电脑与arduino连接起来。 到目前为止进展顺利(我有简单的按钮发送0或1,连接进行得很顺利),但当我添加关键侦听器时,它在连接后立即停止响应。 基本上是这样的: -我点击“运行”,应用程序打开,我可以点击按钮,我可以按键盘上的键,我得到我未连接的信息 -单击“连接”-通过蓝牙连接 -我仍然可以点击按钮(现在什么都不做),但只要我按下一个键,我什么都做不了——甚至点击一个“x”来关闭它。 这帧似乎失去了焦点,所以我在接受帧的所有内容上将focusable设

我正在尝试制作一个应用程序,通过蓝牙将电脑与arduino连接起来。 到目前为止进展顺利(我有简单的按钮发送0或1,连接进行得很顺利),但当我添加关键侦听器时,它在连接后立即停止响应。 基本上是这样的: -我点击“运行”,应用程序打开,我可以点击按钮,我可以按键盘上的键,我得到我未连接的信息 -单击“连接”-通过蓝牙连接 -我仍然可以点击按钮(现在什么都不做),但只要我按下一个键,我什么都做不了——甚至点击一个“x”来关闭它。 这帧似乎失去了焦点,所以我在接受帧的所有内容上将focusable设置为false。 我不知道问题出在哪里

以下是连接按钮的代码:

b1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    if(!connected){
        textArea.append("Connecting to the device on port "+ selectedCOM + "....\n");
                try {
                    serialPort = new SerialPort(selectedCOM);
                    textArea.append("Port opened: " + serialPort.openPort() + "\n");
                    textArea.append("Params set: " + serialPort.setParams(4800, 8, 1, 0) + "\n");

                    textArea.append("Connected succesfully!\n");
                    connected = true;

                } catch (SerialPortException e1) {
                    //e1.printStackTrace();
                    textArea.append("Error: "+e1.getExceptionType()+"\n");  
                }

            } else {
                textArea.append("You can't do that, you are already connected!\n");
            }
        }
    });
和一段密钥侦听器(其余部分如果类似):

远期定义为1:

private final int FORWARD = 1;
这是整个主要课程: 公共类通信{

private static void createAndShowGUI() {

    //Create and set up the window.
    Frame frame = new Frame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        

    //Display the window.
    frame.setFocusable(true);
    frame.setSize(new Dimension(600,600));
    frame.setLayout(new GridLayout());
    frame.setLocation(500, 250);
    frame.setResizable(false);
    frame.pack();
    frame.setVisible(true);

}

public static void main(String[] args)
{

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });

}

}
整个Frame类(扩展了JFrame)大约有300行,所以我不想在这里全部发布

编辑:我将键侦听器更改为swing workers的键绑定,如评论中所建议的,但仍然没有响应。我认为连接可能有一些错误,但我不知道如何解决它们

守则的更改:

forwardAction = new AbstractAction(){
        private static final long serialVersionUID = 1L;
        @Override
        public void actionPerformed(ActionEvent e) {
            SwingWorker<Void,Integer> worker = new SwingWorker<Void,Integer>(){

                @Override
                protected Void doInBackground() throws Exception {
                    goForward();
                    return null;
                }

            };
        worker.execute();
        }

    };
pane.getInputMap(IFW).put(KeyStroke.getKeyStroke("UP"), MOVE_FORWARD);
pane.getActionMap().put(MOVE_FORWARD,forwardAction);
forwardAction=newAbstractAction(){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
SwingWorker worker=新SwingWorker(){
@凌驾
受保护的Void doInBackground()引发异常{
goForward();
返回null;
}
};
worker.execute();
}
};
getInputMap(IFW).put(击键.getKeyStroke(“向上”),向前移动);
pane.getActionMap().put(向前移动,向前操作);

您必须阅读Oracle trails EventDispatchThread和SwingWorkerKeyListener repace以及KeyBindigs和Swing Action,应该从SwingWorker调用输出。我更改了密钥绑定的密钥侦听器并添加了Swing worker,但连接后应用程序仍然没有响应……您必须阅读Oracle trails EventDispatchThread和SwingWorkerrKeyListener使用KeyBindigs和Swing操作重新编程,应该从SwingWorker调用输出tooI更改了键绑定的键侦听器并添加了Swing worker,但连接后应用程序仍然没有响应。。。
forwardAction = new AbstractAction(){
        private static final long serialVersionUID = 1L;
        @Override
        public void actionPerformed(ActionEvent e) {
            SwingWorker<Void,Integer> worker = new SwingWorker<Void,Integer>(){

                @Override
                protected Void doInBackground() throws Exception {
                    goForward();
                    return null;
                }

            };
        worker.execute();
        }

    };
pane.getInputMap(IFW).put(KeyStroke.getKeyStroke("UP"), MOVE_FORWARD);
pane.getActionMap().put(MOVE_FORWARD,forwardAction);