📄 producerconsumerjframe.java
字号:
/* * ProducerConsumerJFrame.java * * Created on 2008年12月1日, 下午2:24 */package pc;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;/** * * @author seven */public class ProducerConsumerJFrame extends javax.swing.JFrame { SyncStack ss = null; Producer p = null; Consumer c = null; /** Creates new form ProducerConsumerJFrame */ public ProducerConsumerJFrame() { initComponents(); } private ProducerConsumerJFrame(String string) { throw new UnsupportedOperationException("Not yet implemented"); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); stackField = new javax.swing.JTextField(); producerField = new javax.swing.JTextField(); consumerField = new javax.swing.JTextField(); demoButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("生产者与消费者测试程序 V1.0 作者:刁诗云"); jLabel1.setText("仓库容量为5个"); jLabel2.setText("仓库库存:"); jLabel3.setText("生产者生产了:"); jLabel4.setText("消费者消费了:"); producerField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { producerFieldActionPerformed(evt); } }); demoButton.setText("开始演示"); demoButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { actionHandler(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(55, 55, 55) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2) .addComponent(jLabel4) .addComponent(jLabel3)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(demoButton) .addContainerGap()) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(consumerField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 173, Short.MAX_VALUE) .addComponent(producerField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 173, Short.MAX_VALUE) .addComponent(stackField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 173, Short.MAX_VALUE)) .addGap(84, 84, 84))))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(33, 33, 33) .addComponent(jLabel1) .addGap(33, 33, 33) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(stackField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(52, 52, 52) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(producerField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(48, 48, 48) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel4) .addComponent(consumerField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addComponent(demoButton) .addContainerGap(15, Short.MAX_VALUE)) ); pack(); }// </editor-fold>//GEN-END:initComponentsprivate void producerFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_producerFieldActionPerformed// TODO add your handling code here:}//GEN-LAST:event_producerFieldActionPerformedprivate void actionHandler(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_actionHandler// TODO add your handling code here: if( evt.getSource() == demoButton){ demoButton.setEnabled(false);//先禁用该按钮 if( ss == null ){//首次执行演示 ss = new SyncStack(); p = new Producer(ss); c = new Consumer(ss); ss.setInfoTextField(this.stackField); p.setInfoTextField(this.producerField); c.setInfoTextField(this.consumerField); } final Thread pt = new Thread(p); final Thread ct = new Thread(c); pt.start(); ct.start(); new Thread(){//新建一个监视线程, public void run() {//监视线程要干的事就是等待所有线程结束,然后对按钮进行修改 try { pt.join();//等待生产者线程结束 if (ct.isAlive()) { ct.join();//如果此时消费者仍未结束,则继续等待 } } catch (InterruptedException ex) { ex.printStackTrace(); } finally { //在所以演示线程结束后再把按钮启用,并重新设置文字 demoButton.setEnabled(true); demoButton.setText("重新开始"); } } }.start();//启动该线程 }}//GEN-LAST:event_actionHandler /** * @param args the command line arguments */ public static void main(String args[]) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { } java.awt.EventQueue.invokeLater(new Runnable() { public void run() { ProducerConsumerJFrame jf = new ProducerConsumerJFrame(); jf .setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField consumerField; private javax.swing.JButton demoButton; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JTextField producerField; private javax.swing.JTextField stackField; // End of variables declaration//GEN-END:variables}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -