我对java很新,并开始使用不同的线程来使用wait()
或sleep()
在我的代码的一部分上运行其他代码.
对于这个项目,我使用JFrame
与javax.swing.*
和java.awt.*
进口.我想要做的是让其中一个线程(在我的代码中它是主要的,起始线程)允许玩家在tic tac toe board上选择一个空间,当他们点击它时,它将改变图标,并且然后AI将等待1秒钟,然后从我创建的第二个线程回放.
不幸的是,每当我调用ait.sleep(1000)
(ait
是我的线程名称)时,两个线程都会在完成执行之前等待1秒.谁能告诉我为什么睡一个线程会阻止我的整个执行?
java swing multithreading event-dispatch-thread thread-sleep
创建时KeyListener
,它需要以下字段:
public void keyPressed(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
Run Code Online (Sandbox Code Playgroud)
但是,当我放入System.out.println(e)
该keyPressed
方法时,当按Enter键时它将返回此值:
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=?,keyChar=?,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0] on javax.swing.JButton[,1,1,100x100,alignmentX=0.0,alignmentY=0.5,border=com.apple.laf.AquaButtonBorder$Dynamic@13b33a0e,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=2,bottom=0,right=2],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=HI,defaultCapable=true]
Run Code Online (Sandbox Code Playgroud)
显然这不是KeyEvent,所以我不能使用它来调用keyPressed(KeyEvent e)
。我想要做的是模拟一个按键(特别是Enter键)的按下,这种方式可以激活keyListener
并将该文本输出到JTextArea中。
注意:我查看了如何完美模拟KeyEvent的可接受答案 。,并且几乎不了解其实际工作原理,并且我希望我理解代码。我也在这里看过如何在Java中模拟键盘按键?,但是我不能让机器人工作;当应该按任何键时,什么也没发生。
我知道在课程开始时你可以编写implements ActionListener
,然后你必须创建public void actionPerformed(ActionEvent e)
它才能使它变得可行.是否可以使用mouseListener执行相同的操作?如果是这样,你有什么方法来代替actionPerformed
?
编辑:这是我的班级声明:
public class Basic_Book extends JFrame implements ActionListener implements MouseListener
Run Code Online (Sandbox Code Playgroud)
这是我旁边显示的错误消息:
可序列化类Basic_Book不声明long类型的静态最终serialVersionUID字段
令牌"implements"上的语法错误,.预期