【问题标题】:setText and setValue not working properlysetText 和 setValue 无法正常工作
【发布时间】:2011-12-31 13:54:13
【问题描述】:

我正在尝试创建一个简单的程序,它将为我上传一些文件到 Windows 共享。我拥有所有基本功能,但我在一些收尾工作方面遇到了问题。我有一个 GUI,我只想显示一些关于上传的信息 - 一个进度条和一个标签。代码如下:

private void btn_UploadActionPerformed(java.awt.event.ActionEvent evt) {

    upl.setFiles(files);

    for(int i = 0; i < files.length; i++){
        progressLabel.setText("Uploading " + files[i].getName());
        upl.uploadFile(i);
        uploadProgress.setValue(uploadProgress.getValue() + 90/files.length);

    }

    uploadProgress.setValue(100);

}

当用户按下上传按钮时执行。问题是, setText 和 setValue 并没有真正发挥应有的作用。当我按下上传按钮时,上传开始(并完成),但标签上的文本不会改变,进度条也不会改变。它们仅在上传完成后更改。

完整的源代码可以在这里找到:Code

有什么建议吗? 附:在java中相当新:)

【问题讨论】:

    标签: java swing user-interface settext setvalue


    【解决方案1】:

    您正在事件调度线程中进行上传。所以在同一个线程中执行的绘画代码,直到上传完成后才能执行。事件处理代码应该尽快完成。如果你有一个很长的任务要执行,它应该在一个单独的后台线程中执行。

    使用 SwingWorker 做你想做的事。 Its javadoc 有一个简单易懂的例子。

    【讨论】:

      【解决方案2】:

      我第二个 JB Nizet,在某些情况下,使用后台线程而不是事件调度线程可以防止用户界面在任务运行时冻结。

      来自 java 教程的仅供参考,

      Swing 程序员处理以下类型的线程:

      • 初始线程,执行初始应用程序代码的线程。

      • 事件调度线程,所有事件处理代码都在其中执行。大多数与 Swing 框架交互的代码也必须在这个线程上执行。

      • 工作线程,也称为后台线程,执行耗时的后台任务。

      【讨论】:

      • 谢谢!我还没有使用线程......但我想是时候开始了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 2015-12-25
      • 2016-12-01
      • 1970-01-01
      相关资源
      最近更新 更多