⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 producerconsumerjframe.java

📁 使用netbean编写的有界面的 生产者与消费者测试小程序
💻 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 + -