当我们在JFrame中存在多个JProcessBar,每个按钮事件启动一个JProcessBar,当单击某个按钮的时候,运行其中一个进度条,往往位出现程序等待的情况,利用多线程技术可以很好的解决这些问题。。。
利用内部类来访问外部类的属性,
具体代码如下
/*
* NewJFrame1.java
*
* Created on 2009-7-28, 17:41:31
*/
package desktopapplication1.resources;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Administrator
*/
public class NewJFrame1 extends javax.swing.JFrame{
/** Creates new form NewJFrame1 */
public NewJFrame1() {
initComponents();
}
/** 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">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jTextField1 = new javax.swing.JTextField();
jProgressBar1 = new javax.swing.JProgressBar();
jProgressBar2 = new javax.swing.JProgressBar();
jButton3 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("jButton1");
jButton1.setName("jButton1"); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("jButton2");
jButton2.setName("jButton2"); // NOI18N
jTextField1.setText("jTextField1");
jTextField1.setName("jTextField1"); // NOI18N
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
ab(evt);
}
});
jProgressBar1.setName("jProgressBar1"); // NOI18N
jProgressBar1.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
jProgressBar1PropertyChange(evt);
}
});
jProgressBar2.setName("jProgressBar2"); // NOI18N
jButton3.setText("jButton3");
jButton3.setName("jButton3"); // NOI18N
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(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()
.addContainerGap(59, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jProgressBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addGap(60, 60, 60)
.addComponent(jButton2)
.addGap(54, 54, 54))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1)
.addGap(33, 33, 33))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton3)
.addGap(46, 46, 46))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(34, 34, 34)
.addComponent(jButton2))
.addGroup(layout.createSequentialGroup()
.addGap(45, 45, 45)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 65, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton1)
.addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(36, 36, 36)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jProgressBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton3))
.addGap(87, 87, 87))
);
pack();
}// </editor-fold>
int leng=0;
boolean a=false;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
ProcessBar1 t=new ProcessBar1(this);
t.start();
jProgressBar1.setVisible(true);
this.jButton1.setEnabled(false);
}
private void ab(java.awt.event.KeyEvent evt) {
System.out.println(evt.getKeyChar());
// TODO add your handling code here:
}
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jProgressBar1PropertyChange(java.beans.PropertyChangeEvent evt) {
// TODO add your handling code here:
javax.swing.JProgressBar bar = (javax.swing.JProgressBar)evt.getSource();
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
ProcessBar2 p = new ProcessBar2(this);
p.start();
}
class ProcessBar2 extends Thread
{
javax.swing.JFrame j =null;
ProcessBar2(javax.swing.JFrame jframe)
{
j = jframe;
}
@Override
public void run() {
int i=0;
while(true){
try {
while(true)
{
jProgressBar2.setValue(DB.getComplete(4, DB.getCon()));
java.lang.Thread.sleep(2000);
if(jProgressBar2.getPercentComplete()==1.0)
{
System.out.println("Complete");
jProgressBar2.setVisible(false);
javax.swing.JOptionPane.showMessageDialog(j,"UserID=1" , "Rejudge Sucess", javax.swing.JOptionPane.INFORMATION_MESSAGE);
break;
}
int a = (int) (jProgressBar2.getPercentComplete() * 100);
jButton3.setText("完成"+a+"%");
}
jButton3.setText("Rejudge");
jButton3.setEnabled(true);
jProgressBar2.setVisible(false);
break;
} catch (InterruptedException ex) {
Logger.getLogger(NewJFrame1.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
/**
* @param args the command line arguments
*/
public static void main() {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
NewJFrame1 nej = new NewJFrame1();
nej.jProgressBar1.setVisible(false);
nej.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JProgressBar jProgressBar1;
private javax.swing.JProgressBar jProgressBar2;
private javax.swing.JTextField jTextField1;
// End of variables declaration
//定义内部类,ProcessBar,@para JFrame
class ProcessBar1 extends Thread
{
javax.swing.JFrame j =null;
ProcessBar1(javax.swing.JFrame jframe)
{
j = jframe;
}
@Override
public void run() {
int i=0;
while(true){
try {
while(true)
{
jProgressBar1.setValue(DB.getComplete(9, DB.getCon()));
java.lang.Thread.sleep(2000);
if(jProgressBar1.getPercentComplete()==1.0)
{
System.out.println("Complete");
jProgressBar1.setVisible(false);
javax.swing.JOptionPane.showMessageDialog(j,"UserID=1" , "Rejudge Sucess", javax.swing.JOptionPane.INFORMATION_MESSAGE);
break;
}
int a = (int) (jProgressBar1.getPercentComplete() * 100);
jButton1.setText("完成"+a+"%");
}
jButton1.setText("Rejudge");
jButton1.setEnabled(true);
jProgressBar1.setVisible(false);
System.out.println(i);
break;
} catch (InterruptedException ex) {
Logger.getLogger(NewJFrame1.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}