Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 混合线程中Swing辅助线程的使用_Java_Multithreading_Swing_Jprogressbar - Fatal编程技术网

Java 混合线程中Swing辅助线程的使用

Java 混合线程中Swing辅助线程的使用,java,multithreading,swing,jprogressbar,Java,Multithreading,Swing,Jprogressbar,我有一个GUI,它由一个工具栏组成,每个按钮调用不同的类。I调用的类由显示在主GUI内部框架中的UI组件组成。被调用的类作为一个单独的线程工作,必须执行以下功能 触发对客户端的命令,以便客户端开始发送 文件的内容 在此处接收文件内容,对其进行筛选并将其添加到JTable 文件内容传输期间必须显示进度条 将UI添加到表后显示该UI 我是Swing worker的新手,所以有人可以帮助我了解它是如何与我的情况配合工作的,以及使用Swing worker和调用以后的函数的优点。我在oracle站点和其

我有一个GUI,它由一个工具栏组成,每个按钮调用不同的类。I调用的类由显示在主GUI内部框架中的UI组件组成。被调用的类作为一个单独的线程工作,必须执行以下功能

  • 触发对客户端的命令,以便客户端开始发送 文件的内容
  • 在此处接收文件内容,对其进行筛选并将其添加到JTable
  • 文件内容传输期间必须显示进度条
  • 将UI添加到表后显示该UI

  • 我是Swing worker的新手,所以有人可以帮助我了解它是如何与我的情况配合工作的,以及使用Swing worker和调用以后的函数的优点。我在oracle站点和其他几个站点中学习了这些示例,但我不知道这对我的类是如何起作用的

    SwingWorker
    已经

    • 通过
      PropertyChange
      支持内置进度更改功能
    • 具有帮助器方法,允许您通过
      publish
      process
      方法同步对UI的更新,从而使该过程大大简化
    • 一个自包含的工作流概念,它(通常)比您自己的工作流更易于使用。这条规则也有例外,但你的提纲不符合这些例外(IMHO)-这既是优点也是缺点
    例如

    • (涉及从SQL源更新
      JTable
      ,但展示了如何使用
      SwingWorker
      更新
      JTable

    SwingWorker
    的一个(可能)缺点是,它只允许(我相信)10个工作线程同时执行

    当您在将使用内部
    ExecutorService
    SwingWorker上调用
    execute()
    时,工作线程限制适用。但是,您也可以将
    SwingWorker
    提交给没有此类限制的任意
    ExecutorService
    。这种可能性是有据可查的,因此不仅仅是副作用。@mad程序员感谢您的回复。我看到了你的回复。我的问题是,我在更新表时没有任何错误。它工作正常,但当我将进度条作为单独的框架运行时,它不会显示。仅显示帧轮廓,该轮廓也处于不透明状态。它就像某种玻璃窗格,代替了框架。@Holger我到现在还没有使用executor服务,所以我不能理解你的意思。无论如何,谢谢你的答复。@Holger同意,可以再填一点,因为知道你只能以这种方式执行SwingWorker
    10
    s有时并不重要。只能从EDT的上下文与UI交互。使用
    SwingWorker
    ,在
    doInBackground
    方法中执行长时间运行的操作,如果您知道需要做多少工作,您可以使用
    setProgress
    触发一个
    PropertyChange
    事件,您的进度窗口可以显示该事件。。。