【问题标题】:How to receive bytes from a lib to update the JProgressBar?如何从 lib 接收字节以更新 JProgressBar?
【发布时间】:2014-12-12 18:11:14
【问题描述】:

我已经尝试从一个库接收字节来设置我的 JProgressBar 更新很长一段时间,但不幸的是 我没有得到我想要的结果。

问题是我不知道如何从 lib 接收字节以及如何在接收字节时更新 JProgressBar 以使用 java 制作浏览器

这是我尝试过的代码:

 private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {                                       
   if (evt.getKeyCode() == KeyEvent.VK_ENTER){
       String az = jTextField1.getText();


       if(az.contains("1")){
            String hh = WorkSpace.jTextField1.getText();

     URLConnection conn = null; 
     InputStream in = null;
    try {

      URL url = new URL(hh);
      conn = url.openConnection();
      in = conn.getInputStream();
      int length = conn.getContentLength(); 
      int current = 0;
      WorkSpace.jProgressBar1.setMaximum(length);
      WorkSpace.jProgressBar1.setValue(0);
      byte[] buffer = new byte[1024];
      int numRead = 0;
      while ((numRead = in.read(buffer)) != -1) {
        current=0;
          current += numRead; 
        WorkSpace.jProgressBar1.setValue(current); 

    }

    } catch (Exception e) {

    }
    }

如果有人知道如何做到这一点,请告诉我。

【问题讨论】:

  • Delete 'current=0;' in while a test again
  • 1- 不要将 KeyListener 与 txt 组件一起使用,而是使用 ActionListerner; 2- Swing 是单线程的,这意味着任何长时间运行或阻塞的操作都会阻止 UI 更新,所以即使你用循环解决了问题,它也不会更新,直到 actionPerformed 方法退出。相反,您可以使用 SwingWorker

标签: java swing netbeans jprogressbar


【解决方案1】:

只需将输入流包装在ProgressMonitorInputStream 中。它将为您管理自己的JProgressBar

【讨论】:

  • 能否请您给我看一些关于如何使用progressmonitorinput 流的代码,谢谢
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多