importjavax.swing.JFrame;importjavax.swing.JButton;importjava.awt.GridLayout;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;import staticjava.lang.System.out;importjava.util.logging.Level;importjava.util.logging.Logger;public class MainFrame extendsJFrame {privateJButton blockButton, unblockButton;private final BlockTest blockTest = newBlockTest();private static final Logger LOGGER = Logger.getLogger(MainFrame.class.getName());privateMainFrame() {
initComponents();
initFrame();
}private voidinitComponents() {
blockButton= new JButton("阻塞测试");
unblockButton= new JButton("解除阻塞");
unblockButton.setEnabled(false);
blockButton.addMouseListener(newMouseAdapter() {
@Overridepublic voidmouseClicked(MouseEvent ev) {if(blockButton.isEnabled()) {//开启一个线程来完成阻塞测试,以避免阻塞应用界面而造成无法响应鼠标键盘的输入
newThread() {
@Overridepublic voidrun() {try{
blockButton.setEnabled(false);
unblockButton.setEnabled(true);
blockTest.block();//处于阻塞状态,以下finally块中的代码在阻塞被解除后才会执行
} catch(InterruptedException ex) {
LOGGER.log(Level.SEVERE,null, ex);
}finally{
out.println("mouseClicked(MouseEvent) called");
}
}
}.start();
}
}
});
unblockButton.addMouseListener(newMouseAdapter() {
@Overridepublic voidmouseClicked(MouseEvent ev) {if(unblockButton.isEnabled()) {
blockTest.unblock();
unblockButton.setEnabled(false);
blockButton.setEnabled(true);
}
}
});
setLayout(new GridLayout(2, 1));
add(blockButton);
add(unblockButton);
}private voidinitFrame() {
setTitle("block test");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}public static voidmain(String[] args) {
MainFrame frame= newMainFrame();
frame.setVisible(true);
}
}