求教JAVA进度条问题 主线程是一个JFRAME, 进度条线程也是一个JFRAME,在通过主线程调用进度条线程的时候,进度条线程没有显示进度信息。不知道板上有没有大虾有过类似的经验。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个貌似和进度条什么的不搭边,你问的只是为什么某一个线程为什么没有被调用而已。确保你的这个线程是新线程并且已经start() 貌似是不搭架的,这个新线程已经start()了,而且我写了一个测试例子,这个例子里面是可以显示的import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.event.ActionEvent; import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JProgressBar;import javax.swing.Timer;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;public class ProgressBar extends Thread implements ChangeListener { JFrame frame=null; JProgressBar progressbar; JLabel label; Timer timer; JButton b; int m_curVal; int m_maxVal; public ProgressBar(int maxVal){ m_maxVal = maxVal; frame=new JFrame("下载进度"); frame.setBounds(100, 100, 400, 130); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPanel=frame.getContentPane(); label=new JLabel("",JLabel.CENTER); progressbar = new JProgressBar(); progressbar.setOrientation(JProgressBar.HORIZONTAL); progressbar.setMinimum(0); progressbar.setMaximum(maxVal); progressbar.setValue(0); progressbar.setStringPainted(true); progressbar.addChangeListener(this); progressbar.setPreferredSize(new Dimension(300,20)); progressbar.setBorderPainted(true); progressbar.setBackground(Color.pink); contentPanel.add(progressbar,BorderLayout.CENTER); contentPanel.add(label,BorderLayout.SOUTH); frame.add(progressbar,BorderLayout.CENTER); frame.add(label,BorderLayout.SOUTH); frame.setVisible(true); frame.repaint(); this.start(); } public void run(){ while(m_curVal < m_maxVal){ try{ progressbar.setValue(m_curVal); Thread.sleep(8000); }catch(Exception e){ e.printStackTrace(); } } progressbar.setValue(m_curVal); } public void setCurVal(int curVal){ m_curVal = curVal; } public void actionPerformed(ActionEvent e) { } public void stateChanged(ChangeEvent e1) { int value=progressbar.getValue(); if(e1.getSource()==progressbar){ int val = (int)(Math.round((float)(value)/(m_maxVal)*100)); label.setText("目前已完成进度:"+Integer.toString(((int)(val)))+"%"); label.setForeground(Color.blue); } } public static void main(String[] args) { ProgressBar app=new ProgressBar(30);// javax.swing.SwingUtilities.invokeLater(app); app.setCurVal(1); for(int k = 1; k <=30; k++){ try{ for(int i = 0 ; i<1000; i++) i = i - i; app.setCurVal(k); Thread.sleep(3000); }catch(Exception e){ } } }}这个在MAIN函数中是可以显示的 在你的这个main中 我怎么没有看见start()请问,你知道如何开启一个线程吗? 在构造函数里面,this.start();初始化完了的时候我已经start()了。 从C++转到JAVA,刚搞一个星期,确实还有很多东西不明白的。 继承了thread类的线程的启动方式:先实例化,然后再Start()启动此线程而且你的所有业务逻辑最好是都写在run()方法中,这样做的目的是为了你启动线程的同时,所有的相关操作也都执行了。而没有必要再调用这个线程中的其它方法你需要重新整理下你的思路 java linux 请问这个乱码肿木办嘞 复用类组合语法 运行出来是0????????????不是435? 如何获取类似页面的数据? 涨涨人气,你参与的第一个GUI项目是什么? java新手 请问下面这段代码是怎么输出的,为什么 初学JAVA的几个问题! java分割字符串 snmpv3的加密与鉴权问题 百分求助pdf文档转换为pdf/a格式,大家帮忙!
貌似是不搭架的,这个新线程已经start()了,而且我写了一个测试例子,这个例子里面是可以显示的
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.Timer;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ProgressBar extends Thread implements ChangeListener {
JFrame frame=null;
JProgressBar progressbar;
JLabel label;
Timer timer;
JButton b;
int m_curVal;
int m_maxVal;
public ProgressBar(int maxVal){
m_maxVal = maxVal;
frame=new JFrame("下载进度");
frame.setBounds(100, 100, 400, 130);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPanel=frame.getContentPane();
label=new JLabel("",JLabel.CENTER);
progressbar = new JProgressBar();
progressbar.setOrientation(JProgressBar.HORIZONTAL);
progressbar.setMinimum(0);
progressbar.setMaximum(maxVal);
progressbar.setValue(0);
progressbar.setStringPainted(true);
progressbar.addChangeListener(this);
progressbar.setPreferredSize(new Dimension(300,20));
progressbar.setBorderPainted(true);
progressbar.setBackground(Color.pink);
contentPanel.add(progressbar,BorderLayout.CENTER);
contentPanel.add(label,BorderLayout.SOUTH);
frame.add(progressbar,BorderLayout.CENTER);
frame.add(label,BorderLayout.SOUTH);
frame.setVisible(true);
frame.repaint();
this.start();
}
public void run(){
while(m_curVal < m_maxVal){
try{
progressbar.setValue(m_curVal);
Thread.sleep(8000);
}catch(Exception e){
e.printStackTrace();
}
}
progressbar.setValue(m_curVal);
}
public void setCurVal(int curVal){
m_curVal = curVal;
}
public void actionPerformed(ActionEvent e) {
} public void stateChanged(ChangeEvent e1) {
int value=progressbar.getValue();
if(e1.getSource()==progressbar){
int val = (int)(Math.round((float)(value)/(m_maxVal)*100));
label.setText("目前已完成进度:"+Integer.toString(((int)(val)))+"%");
label.setForeground(Color.blue);
} }
public static void main(String[] args) {
ProgressBar app=new ProgressBar(30);
// javax.swing.SwingUtilities.invokeLater(app);
app.setCurVal(1);
for(int k = 1; k <=30; k++){
try{
for(int i = 0 ; i<1000; i++)
i = i - i;
app.setCurVal(k);
Thread.sleep(3000);
}catch(Exception e){
}
}
}
}
这个在MAIN函数中是可以显示的
请问,你知道如何开启一个线程吗?
在构造函数里面,this.start();
初始化完了的时候我已经start()了。 从C++转到JAVA,刚搞一个星期,确实还有很多东西
不明白的。