【发布时间】:2012-04-01 08:58:50
【问题描述】:
我有一个主类(基本上是一个 netbeans 表单;拖放)从我的应用程序开始和另一个类(称为类 2)我的函数驻留。我首先从我的主方法调用类 2 中的一个函数并且该方法有一个增加计数器的while循环。根据该计数器,我调用我的主类的函数并尝试在文本字段中显示计数器,并在中间显示进度条,但它不工作,虽然它显示打印陈述正确(计数器)。
我添加的一些代码给我带来了问题,因为它既没有更新进度条也没有更新文本字段。请帮助我为什么会发生这种情况
我已经编辑了代码,但它仍然没有显示任何内容:(
public class NewClass
{
public static int counter = 0;
public NewJFrame p = new NewJFrame();
public void packet()
{
try
{
while (true)
{
//some code ,right now which i have omitted
counter = counter + 1;
counter2(counter);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void counter2(int counter)
{
counter3();
}
public void counter3()
{
p.progress(counter);
}
}
现在这是我调用上面给出的其他类()代码中存在的函数的主要方法)
public class NewJFrame extends javax.swing.JFrame
{
/** Creates new form NewJFrame */
public NewJFrame()
{
initComponents();
}
@SuppressWarnings("unchecked")
public void progress(int y)
{
jProgressBar1.setIndeterminate(true);
jTextField1.setText(y+"packets processed");
System.out.println(y);
}
private void jButton1MouseClicked(java.awt.event.MouseEvent evt)
{
NewClass m=new NewClass();
m.packet();
}
/**
* @param args the command line arguments
*/
public static void main(String args[])
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
e.printStackTrace();
}
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JProgressBar jProgressBar1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}
【问题讨论】:
-
您正在
counter3()方法内创建NewJFrame类的新对象,每次迭代while循环。只创建一个实例,并使用该实例来更新值:-) -
@GagandeepBali 哦,是的,你是对的,但它仍然什么也没显示:(
-
@Zara :您在该示例中的 while 循环阻塞了 EDT,尝试添加类似
if (counter == 10) break;的内容,如果您遵守我在上一条评论中的建议,它将打印出来 :-)。似乎while循环正是应该使用SwingWorker的情况 -
这里JProgressBar Tutorials,一个很好的例子,与你的案例有关。看看它:-)
-
当你的previous question with the same code 还不到 3 小时时,你为什么要开始一个新问题。如果您有新信息,只需编辑您之前的问题。
标签: java swing netbeans jtextfield jprogressbar