GVKun编程网logo

使用Java的SwingWorker超时任务(java 超时实现)

14

如果您想了解使用Java的SwingWorker超时任务的相关知识,那么本文是一篇不可错过的文章,我们将对java超时实现进行全面详尽的解释,并且为您提供关于DjangoGunicornNginxWo

如果您想了解使用Java的SwingWorker超时任务的相关知识,那么本文是一篇不可错过的文章,我们将对java 超时实现进行全面详尽的解释,并且为您提供关于Django Gunicorn Nginx Worker超时上游超时错误、Java GUI线程-SwingWorker、Java SwingWorkder使用实例、Java Swingworker和多线程的有价值的信息。

本文目录一览:

使用Java的SwingWorker超时任务(java 超时实现)

使用Java的SwingWorker超时任务(java 超时实现)

我正在尝试SwingWorker在我的应用程序中实现一个类。有没有办法设置时间长度,之后SwingWorker会“超时”?我当时在想,也许会抛出一个OutOfTime异常,我可以捕捉然后处理。我只是不确定如何实现它。

感谢你的帮助!

答案1

小编典典

为什么不将您的任务嵌入到Runnable中,将其放入新的单线程ExecutorService中,然后get()在适当的超时时间内对生成的Future执行。这将为您提供超时功能,因为get()如果作业未及时完成,则会抛出异常。

Django Gunicorn Nginx Worker超时上游超时错误

Django Gunicorn Nginx Worker超时上游超时错误

如何解决Django Gunicorn Nginx Worker超时上游超时错误?

我有一个在Azure Ubuntu VM服务器上的Django,Gunicorn和Nginx上运行的Web应用程序。当运行更长的请求时,请求超时并进入504/502超时错误。我已经尝试在Nginx和GUnicorn配置中更改超时选项,但是没有用。以下是我的配置文件,

Nginx.conf

results=results[0];

{
 "results": 22390
}

}

Supervisor.conf

server {
listen 80;
server_name 0.0.0.0;

location /static {
    alias /home/rootadmin/WeIntelli/static;
}

location / {
    proxy_pass http://unix:/home/rootadmin/WeIntelli/WeIntelli.sock;
    proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffers 32 4k;
}

请先谢谢您帮助我解决此问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Java GUI线程-SwingWorker

Java GUI线程-SwingWorker

我对SwingWorker和Java GUI有疑问。

我有几类,其处理的信息,我们可以给他们打电话Foo1Foo2Foo3。此处理可能需要很长时间。

这些都是的子类Foo,但是Foo本身并不是直接调用的(这些Foo[x]类使用继承自的方法Foo。为了使EDT自由绘制进度条,SwingWorker在保持对象层次结构时最好的使用方法是什么?是否具有包装器类,Foo1Worker extends SwingWorker并且有其doInBackground()调用Foo1.myProcessMethod()?即使Foo1不扩展SwingWorker,它仍然可以按我期望的那样工作吗?

编辑:澄清我的问题,Foo[x]即使他们已经是子类,我如何制作SwingWorkers?

Java SwingWorkder使用实例

Java SwingWorkder使用实例

最近在学习Swing,我们都知道在UI表现线程里面长时间执行操作时,画面会假死,为了能够让费时操作不影响画面表现,就需要用多线程了

首先考虑的就是Swing内部的 SwingWorkder对象,但是网上现成的例子不好找,主要参照了网上的资料,自己整理了一个。

注意:SwingWorkder对象只能执行一次,不能重复执行!例如点击开始,结束后,就不能再次开始了。

复制代码 代码如下:

import java.awt.BorderLayout;

import java.awt.event.*;

import java.beans.PropertyChangeEvent;

import java.beans.Propertychangelistener;

import java.util.List;

import java.util.concurrent.ExecutionException;

import javax.swing.*;

import javax.swing.SwingWorker;

public class SwingWorkerSample {

    public static void main(String[] args) {

        // 外观定义

        try {

            UIManager

                    .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

        } catch (Exception ex) {

        }

        // 窗体

        JFrame f = new JFrame("SwingWorker Sample");

        f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

        // 表示区

        final JTextArea taOutput = new JTextArea(15, 30);

        JScrollPane sp = new JScrollPane(taOutput);

        f.add(sp);

        // 底部进度条

        final JProgressBar progressBar = new JProgressBar();

        f.add(BorderLayout.soUTH, progressBar);

        // 开始按钮

        JButton b = new JButton("开始");

        f.add(BorderLayout.norTH, b);

        // 结束按钮

        JButton b2 = new JButton("结束");

        f.add(BorderLayout.AFTER_LINE_ENDS, b2);

        // SwingWorker类

        final SwingWorker sw = new SwingWorker() {

            /** 执行操作 */

            @Override

            protected Integer doInBackground() throws Exception {

                int sum = 0;

                if (!this.isCancelled()) {

                    for (int i = 1; i                         sum += i;

                        publish(new int[] { i, sum });// 调用表示中间结果

                        setProgress(i * 10);// 进度条

                        Thread.sleep(1000);

                    }

                }

                return sum;

            }

            /** 表示中间结果 */

            @Override

            protected void process(List chunks) {

                StringBuilder sb = new StringBuilder();

                for (int[] values : chunks) {

                    sb.append(String.format("累加%d等于%d%n", values[0], values[1]));

                }

                taOutput.append(sb.toString());

            }

            /** 处理完成 */

            @Override

            protected void done() {

                if (this != null && !this.isDone()) {

                    try {

                        int result = get();

                        taOutput.append("完了。 合计" + result + "n");

                    } catch (InterruptedException ex) {

                    } catch (ExecutionException ex) {

                    }

                }

            }

        };

        // 进度条表示

        sw.addPropertychangelistener(new Propertychangelistener() {

            @Override

            public void propertyChange(PropertyChangeEvent evt) {

                if ("progress".equals(evt.getPropertyName())) {

                    progressBar.setValue((Integer) evt.getNewValue());

                }

            }

        });

        // 开始按钮事件

        b.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                sw.execute();// 异步调用SwingWorkder

            }

        });

        // 结束按钮

        b2.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                if (sw != null && !sw.isDone()) {

                    // Cancel

                    sw.cancel(true);

                }

                JOptionPane.showMessageDialog(null, "结束!");

            }

        });

        // 窗体表示

        f.pack();

        f.setVisible(true);

    }

}

Java Swingworker和多线程

Java Swingworker和多线程

我正在设计一个 Java GUI驱动的应用程序,该应用程序运行许多单独的任务,每个任务都在自己的SwingWorker扩展类中.这是我使用的正常设计,以便在自己的线程上运行任务,并且仍然可以让EDT免费更新GUI.每个SwingWorker都使用Executors.newCachedThreadPool在自己的线程上启动.

但是,在一个特定的类中,有一个任务需要相当长的时间来处理.该任务包含一个for循环,最多可执行六次计算.

我已经考虑过在自己的线程中实现六个计算中的每一个以加快处理时间,但我不确定实现它的最佳方法.

是否可以扩展SwingWorker并实现Runnable,然后在for循环中使用void Run()方法,每次启动一个新的Thread,或者使用cachedThreadPool.

或者我最好只使用标准的Thread()实现?

任何建议或意见将不胜感激.

提前致谢

玩笑

解决方法

user988052当然是正确的 – 如果你没有多核cpu,那么在六个不同的线程中进行计算实际上会减慢你的应用程序,因为线程的创建和管理带来了开销.

如果你想在六个独立的线程中进行这种计算,你可以使用SwingWorker作为管理线程,并在其中产生5-6个新线程.然后使用ExecutorService就可以了,因为它使用了一个线程池,从而最大限度地减少了创建和处理线程所带来的开销.

编辑:回答你的评论:

我认为最好的方法是在Runnable中实现计算(以便六个计算中的每一个可以单独运行),然后只需使用ExecutorService,实例化Runnablesix次并使用ExecutorService.submit(Runnable任务).您可以在SwingWorker.doInBackground()方法中完成所有这些操作.

你永远不应该自己调用run()方法 – 让它由Thread / ExecutorService完成.

我们今天的关于使用Java的SwingWorker超时任务java 超时实现的分享已经告一段落,感谢您的关注,如果您想了解更多关于Django Gunicorn Nginx Worker超时上游超时错误、Java GUI线程-SwingWorker、Java SwingWorkder使用实例、Java Swingworker和多线程的相关信息,请在本站查询。

本文标签: