我要从客户端传一个文件到服务器去计算,然后再把计算好的文件从服务器传回客户端(传输过程通过socket实现)。这个过程需要点时间,所以想做个进度条。
我是这样设计的:当在客户端选择好要传输的文件后,调用负责传输的socket类,然后再写一个frame类(内容在下面)来实现进度条的功能,类名是 Csocket。在socket类中调用Csocket类.
问题是当传输时显示不出frame里的jlabel和JProgressBar组件,只显示一个空白的frame,但是计算完后可以显示出来,并会显示进度条的值是100/100,而且单独运行Csocket类时可以显示出
请问高手是怎么一回事?(执行步骤的截图在附件,分别命名为1、2、3、4)
Csocket类如下:
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JProgressBar;public class Csocket extends javax.swing.JFrame {
public JProgressBar jProgressBar=new JProgressBar();
/** Creates new form Csocket */
public Csocket() {
int height,width;
Dimension dd;
dd=Toolkit.getDefaultToolkit().getScreenSize();
initComponents();
height=this.getHeight();
width=this.getWidth();
System.out.println(dd.height+" "+ dd.width+" "+height+" "+width);
height=(dd.height-height)/2;
width=(dd.width-width)/2;
this.setLocation(width, height);
jProgressBar.setSize(250,25);
jProgressBar.setLocation(25, 70);
jProgressBar.setVisible(true);
this.add(jProgressBar);
}
private void initComponents() { jLabel1 = new javax.swing.JLabel(); setTitle("Data is sending, please wait.."); jLabel1.setFont(new java.awt.Font("宋体", 0, 14)); // NOI18N
jLabel1.setText("Data is sending, please wait..."); 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(56, 56, 56)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(36, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(52, Short.MAX_VALUE))
); pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
// new Csocket().add(jProgressBar);
new Csocket().setVisible(true);
}
});
}
private javax.swing.JLabel jLabel1;
}
调用部分这样写的:
Csocket pBar = new Csocket();
pBar.setVisible(true);
pBar.jProgressBar.setValue(20);
我是这样设计的:当在客户端选择好要传输的文件后,调用负责传输的socket类,然后再写一个frame类(内容在下面)来实现进度条的功能,类名是 Csocket。在socket类中调用Csocket类.
问题是当传输时显示不出frame里的jlabel和JProgressBar组件,只显示一个空白的frame,但是计算完后可以显示出来,并会显示进度条的值是100/100,而且单独运行Csocket类时可以显示出
请问高手是怎么一回事?(执行步骤的截图在附件,分别命名为1、2、3、4)
Csocket类如下:
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JProgressBar;public class Csocket extends javax.swing.JFrame {
public JProgressBar jProgressBar=new JProgressBar();
/** Creates new form Csocket */
public Csocket() {
int height,width;
Dimension dd;
dd=Toolkit.getDefaultToolkit().getScreenSize();
initComponents();
height=this.getHeight();
width=this.getWidth();
System.out.println(dd.height+" "+ dd.width+" "+height+" "+width);
height=(dd.height-height)/2;
width=(dd.width-width)/2;
this.setLocation(width, height);
jProgressBar.setSize(250,25);
jProgressBar.setLocation(25, 70);
jProgressBar.setVisible(true);
this.add(jProgressBar);
}
private void initComponents() { jLabel1 = new javax.swing.JLabel(); setTitle("Data is sending, please wait.."); jLabel1.setFont(new java.awt.Font("宋体", 0, 14)); // NOI18N
jLabel1.setText("Data is sending, please wait..."); 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(56, 56, 56)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(36, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(52, Short.MAX_VALUE))
); pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
// new Csocket().add(jProgressBar);
new Csocket().setVisible(true);
}
});
}
private javax.swing.JLabel jLabel1;
}
调用部分这样写的:
Csocket pBar = new Csocket();
pBar.setVisible(true);
pBar.jProgressBar.setValue(20);
解决方案 »
- socket编程使用BufferedReader的readLine方法问题
- 求关于JAVA变量的问题
- java异常 jBuild
- 新手问题——关于<c:if></c:if>的应用
- 请教高手解答一个难题!关于类中方法执行顺序
- 如何让我的java数据库接口程序和操作系统一起启动呢?(up有分)
- 散分!!!!JAVA的入门者
- 定义最简单的GUI的问题,也可能是编译问题,初学者
- 关于使用SDK的编译器时出现的错误提示,请大虾帮我解释一下并给出解决办法。
- 请问 Java 里面有生成 Excel 文件的类吗?
- 打JAR包后找不到第三方包,附上MAINEFEST.MF文件设置
- 关于使用logic:iterate 整合struts 和hiberante分页的问题
楼主【regxx】截止到2008-06-29 21:11:42的历史汇总数据(不包括此帖):
发帖数:4 发帖分:170
结贴数:3 结贴分:120
未结数:1 未结分:50
结贴率:75.00 % 结分率:70.59 %
楼主加油
GUI版里的我给你回了哈