标签: dispatch

在Java程序中使用多个线程需要在EDT上创建Swing对象

Re:要求在Event-Dispatch Thread上创建Swing对象.

我正在开发一个应用程序,其目的是监视和显示各种远程嵌入式服务器的状况.我是Java的新手,我对Swing对象和EDT的要求的理解是不完整的.

主GUI在EDT上以通常的方式启动,如下所示,

    javax.swing.SwingUtilities.invokeLater(new Runnable() {

        public void run() {
            createAndShowGUI();
        }
    });
Run Code Online (Sandbox Code Playgroud)

然后,用户可以选择与一个或另一个远程机器相对应的一个或多个菜单选项.这样做的效果是每次都创建一个新线程,如下所示

                new Thread(new VoterStatus(itemNumber)).start();
Run Code Online (Sandbox Code Playgroud)

它调用VoterStatus的类"run"方法,该方法又创建一个带有JFrame的新窗口.新线程(VoterStatus类的一个实例)然后询问(TCP等)指定的特定远程(itemNumber),收集各种信息并在JFrame中显示它们.

可能有任意数量的此类线程对应于VoterStatus的实例,所有这些都更新了自己的窗口.这些不同的窗口/ JFrame /任务之间没有数据共享.

这似乎工作得很好,但是安全吗?

我是否违反了有关在EDT上创建Swing组件的规则?

使用SwingWorker类会有益吗?

我要感谢Java程序员在这些问题上更有经验的任何评论.

谢谢Steve

java events swing multithreading dispatch

2
推荐指数
1
解决办法
480
查看次数

Java Dispatching-Runtime类型

我对java中的方法调度感到困惑.为什么第一种方法"a.m1(b)"调用A类?

调用变量是一个.它的运行时类型是B,不是吗?

class A {
    public void m1(A a){
        System.out.println("A-m1");
    }
    public void m1(){
        System.out.println("A-m1");
    }

}
class B extends A {
    public void m1( B b){
        System.out.println("B-m1");

    }
    public void m1(){
        System.out.println("B-m1");

    }

}
public class HelloWorld {
    public static void main(String[] args) {

    B b = new B();  
    A a = new B();

        a.m1(b);//prints A-m1
        a.m1();//prints B-m1

    }

}
Run Code Online (Sandbox Code Playgroud)

java dispatch runtime-type

2
推荐指数
1
解决办法
667
查看次数

在这种情况下,有人可以为我解释dispatch_async()

我在一个单独的类中有以下方法:

class API: NSObject {

    var data = NSData()
    var delegate: APIProtocol?

    func getItems(callback: (Array<Image>) -> ()) {
        let urlPath: NSString = "http://localhost:3000/files"
        let url = NSURL(string: urlPath)

        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "GET"
        request.addValue("application/json", forHTTPHeaderField: "Accept")

        let config = NSURLSessionConfiguration.defaultSessionConfiguration() as NSURLSessionConfiguration
        let session = NSURLSession(configuration: config) as NSURLSession

        var dataTask = NSURLSessionDataTask()
        dataTask = session.dataTaskWithRequest(request) { (data, response, error) in
            if (error == nil) {
                println("API at URL \(url)")

                let responseArray = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: …
Run Code Online (Sandbox Code Playgroud)

thread-safety dispatch swift

2
推荐指数
1
解决办法
869
查看次数

dispatch_after recursion vs NSTimer scheduledtimerwithtimeinterval

我读了一段代码,它每秒都会检查数据并更新UI.这听起来像我们通常使用的NSTimer scheduledtimerwithtimeinterval.但是这个代码是通过递归调用实现的dispatch_after:

- (void) retriggerMethod {
    ... do stuff here, assuming you want to do it on first invocation ...
    dispatch_after( ..., ^{
        [self retriggerMethod];
    });
}
Run Code Online (Sandbox Code Playgroud)

dispatch_after递归NSTimer scheduledtimerwithtimeinterval之间的区别是什么?使用前者时是否存在潜在风险?我想当你使用它时,只要不结束这种递归,调用栈就会增长.

recursion nstimer dispatch grand-central-dispatch ios

2
推荐指数
1
解决办法
1948
查看次数

在 IE 11 中调度事件的正确方法

我在 Internet Explorer 11 中调度事件时遇到问题。目前,我们有:

fireEvent 对于 IE 和

createEvent
initEvent
dispatchEvent
Run Code Online (Sandbox Code Playgroud)

普通浏览器的习惯用法。

问题是这些在 IE 11 中都不起作用。新方法 - 使用new Event()/也不起作用new CustomEvent()

看起来微软弃用了他们的专有fireEvent(对于 IE 11),但没有提供对正确调度的支持。

附注。我相信我已经阅读了与此相关的所有主题,但仍然找不到工作解决方案

javascript events internet-explorer dispatch internet-explorer-11

2
推荐指数
1
解决办法
4525
查看次数

对循环重复调用dispatch_group_leave()的不平衡

我正在使用调度组来获取数据字符串。这是一个代码,我不确定为什么要输入Unbalanced call to dispatch_group_leave()此代码。

var queue = DispatchQueue(label: "extractStringQueue", attributes: .concurrent)
queue.async {
  let m_group = DispatchGroup() 
    let weeks = self.weekDataArray 

    for week in weeks {
        for day in week.dayDataArray {
             m_group.enter()
             day.processStringData(dataName, completionHandler: { (data, response, error) in 
                    if true {
                        // Process 
                        m_group.leave()    
                    }
              })
        }
    }

    m_group.notify(queue: queue, execute: {
     // CompletionHandler
    })
}
Run Code Online (Sandbox Code Playgroud)

concurrency dispatch ios

2
推荐指数
1
解决办法
1260
查看次数

Django Rest Framework:从 mixin 的 dispatch 方法返回响应

为了与 slack 交互,服务器需要能够基于某种加密散列验证请求。如果此检查返回 false,则服务器应以 400 响应。将其作为 mixin 执行此操作似乎是明智的:

class SlackValidationMixin:
    def dispatch(self, request, *args, **kwargs):
        if validate_slack_request(request):
            return super().dispatch(request, *args, **kwargs)
        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

这给出了错误“accepted_renderer not set on Response”基于一个SO问题,我添加了以下内容:

class SlackValidationMixin:
    def dispatch(self, request, *args, **kwargs):
        if validate_slack_request(request):
            return super().dispatch(request, *args, **kwargs)
        else:
            response = Response(status=status.HTTP_400_BAD_REQUEST)
            response.accepted_renderer = JSONRenderer
            response.accepted_media_type = "application/json"
            response.renderer_context = {}
            return response
Run Code Online (Sandbox Code Playgroud)

但这给出了错误: AttributeError: 'NoneType' object has no attribute 'get_indent'

为什么它需要一个accepted_renderer,因为它只响应一个HTTP 状态代码,没有额外的数据?解决这个问题的最简单方法是什么?

以下建议使 EmptyResponse 对象从 Response 继承:

Traceback (most recent call last):
  File "path/lib/python3.8/site-packages/django/core/handlers/exception.py", line …
Run Code Online (Sandbox Code Playgroud)

django dispatch django-rest-framework django-drf-renderer

2
推荐指数
1
解决办法
1020
查看次数

怎样才能不那么频繁地发货呢?

我读过很多关于派遣工作的文章。但我对此仍然有点困惑。

例如,如果我有

class ViewController: UIViewController {

    @IBAction func actionDoStuff(_ sender: UIButton) {

         DispatchQueue.global(qos: .userInitiated).async {

              Api.request { result in

                  //completes in main thread

                  //what if I need to dispatch again ?

                 DispatchQueue.global(qos: .userInitiated).async {

                     //Do other stuff here

                 }

              }

          }


     }
}
Run Code Online (Sandbox Code Playgroud)

class Api {

    static func request(completion: @escaping (Result<String, NSError>) -> Void) {

        DispatchQueue.global(qos: .userInitiated).async {

        //url session configure
        let url = URL(fileURLWithPath: "test.com")
        URLSession.shared.dataTask(with: url) { data, response, error in

                DispatchQueue.main.async {

                     completion(.success("Request are success")) //without …
Run Code Online (Sandbox Code Playgroud)

dispatch swift

2
推荐指数
1
解决办法
310
查看次数

使用异步 Firebase 调用 SwiftUI

我知道 Firebase getDocument 调用是异步的,所以我试图找出如何本质上等待调用完成执行,然后继续执行其他操作。

我尝试过使用 DispatchGroup() 并进入/离开组,但我似乎无法让它正常工作。我有类似以下内容:

let myGroup = DispatchGroup()
let usersRef = self.db.collection("Users").document("Users").collection("Users")
if self.testCondition == false {
    self.errorMessage = "error"
} else{
    usersRef.getDocuments {(snap, err) in
        myGroup.enter()
        //basically getting every username
        for document in snap!.documents{
            let user = document["username"] as! String
            let userRef = usersRef.document(user)
            userRef.getDocument { (snapshot, err) in
                if err != nil {
                    print(err)
                } else {
                    let sample = snapshot!["sample"] as! String
                    if sample == 'bad' {
                        self.errorMessage = "error"
                    }
                }
            }
        } …
Run Code Online (Sandbox Code Playgroud)

dispatch firebase swift google-cloud-firestore swiftui

2
推荐指数
1
解决办法
1257
查看次数

如何将两个特征与 enum_dispatch 一起使用?

我试过了:

#[enum_dispatch(BarTrait, BazTrait)]
pub enum Foo {
    VariantZero,
    ...
}
Run Code Online (Sandbox Code Playgroud)

它似乎忽略了第一个之后的任何特征,默默地。

这会导致错误,因为在这种情况下,编译器似乎不相信 Foo 实现了 BazTrait。


更新:@kmdreko 的代码只要与BazTrait位于同一个板条箱中就可以正常工作Foo

BazTrait位于另一个同样使用 的板条箱中时enum_dispatchBazTrait将被忽略并导致以下形式的两个错误:

error[E0599]: no method named `baz` found for enum `Foo` in the current scope
  --> src/main.rs:53:9
   |
45 | enum Foo {
   | -------- method `baz` not found for this
...
53 |     foo.baz();
   |         ^^^ method not found in `Foo`
   |
   = help: items from traits can only be …
Run Code Online (Sandbox Code Playgroud)

enums dispatch rust enum-dispatch

2
推荐指数
1
解决办法
1292
查看次数