标签: eventqueue

DOM事件优先级

JavaScript中处理事件的优先顺序是什么?

以下是按字母顺序排列的事件......

  1. onabort - 图像的加载被中断
  2. onblur - 元素失去焦点
  3. onchange - 用户更改字段的内容
  4. onclick - 鼠标单击一个对象
  5. ondblclick - 鼠标双击一个对象
  6. onerror - 加载文档或图像时发生错误
  7. onfocus - 元素获得焦点
  8. onkeydown - 按下键盘键
  9. onkeypress - 按下或按住键盘键
  10. onkeyup - 发布键盘键
  11. onload - 页面或图像已完成加载
  12. onmousedown - 按下鼠标按钮
  13. onmousemove - 移动鼠标
  14. onmouseout - 鼠标移出元素
  15. onmouseover - 鼠标移动到元素上
  16. onmouseup - 释放鼠标按钮
  17. onreset - 单击重置按钮
  18. onresize - 调整窗口或框架的大小
  19. onselect - 选择文本
  20. onsubmit - 单击提交按钮
  21. onunload - 用户退出页面

他们从事件队列中处理了什么顺序?

优先级不是先进先出(FIFO),所以我相信.

javascript event-handling eventqueue dom-events

56
推荐指数
4
解决办法
2万
查看次数

如何用自己的实现替换AWT EventQueue

为了调试Swing应用程序中的奇怪行为,我想用我自己的实现替换AWT EventQueue.

这可能吗?怎么样?

万一你有兴趣:

  • 实现将是一个围绕正常Eventqueue的简单包装器,进行一些日志记录.

  • 我想要调试的问题是一个TableCellEditor,它可以在一个小的演示应用程序中正常工作,但是当放入真正的应用程序时,由于某些事件,会立即调用stopCellEditing.我希望能够访问该活动,以便了解它的来源.

java swing eventqueue

22
推荐指数
2
解决办法
7255
查看次数

为什么人们在事件队列上运行Java GUI

在Java中,要创建和显示新的JFrame,我只需这样做:

public static void main(String[] args) {
   new MyCustomFrameClass().setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

但是,我见过很多人这样做:

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MyCustomFrameClass().setVisible(true);
       }
    });
}
Run Code Online (Sandbox Code Playgroud)

为什么?有什么好处吗?

java swing multithreading jframe eventqueue

9
推荐指数
1
解决办法
4475
查看次数

理解node.js事件队列和process.nextTick

我很难理解它究竟是怎么process.nextTick回事.我以为我理解了,但我似乎无法复制我觉得这应该有效:

var handler = function(req, res) {
    res.writeHead(200, {'Content-type' : 'text/html'});
    foo(function() {
        console.log("bar");
    });
    console.log("received");
    res.end("Hello, world!");
}

function foo(callback) {
    var i = 0;
    while(i<1000000000) i++;
    process.nextTick(callback);
}

require('http').createServer(handler).listen(3000);
Run Code Online (Sandbox Code Playgroud)

虽然foo是循环的,我会在几个请求发送,假设handler将排队几次身后foocallback只在被排队foo完成.

如果我对这是如何工作正确的,我认为结果将如下所示:

received
received
received
received
bar
bar
bar
bar
Run Code Online (Sandbox Code Playgroud)

但它没有,它只是顺序的:

received
bar
received
bar
received
bar
received
bar
Run Code Online (Sandbox Code Playgroud)

我看到它foo在执行之前正在返回,callback这是预期的,但似乎callback是NEXT在队列中,而不是在队列的末尾,在所有请求进入后面.这是否有效?也许我只是不明白节点中的事件队列是如何工作的.请不要指我在这里.谢谢.

javascript callback eventqueue node.js

7
推荐指数
1
解决办法
6710
查看次数

Java EventQueue.我什么时候应该考虑使用它?

我目前正在查看Oracle网站上的EventQueue类:http: //download.oracle.com/javase/1.4.2/docs/api/java/awt/EventQueue.html 但我不知道什么时候应该用它?如果我的班级有两个或更多活动的听众,我应该使用它吗?

java swing awt eventqueue

6
推荐指数
2
解决办法
3035
查看次数

EventQueue.invokeLater vrs SwingUtilities.invokeLater

有人可以突出显示这两者之间的差异吗?两者都是必需的?!

我有一个应用程序,它同时使用,但想知道一个是否优于另一个.显然他们都接受了Runnable object,所以对我来说 - 我想我可以使用我喜欢的那个.

为什么这两个类似的功能在不同的类中?我知道有一个在awt和另一个Swing,但他们不是做同样的事情吗?

java swing awt eventqueue swingutilities

6
推荐指数
2
解决办法
2501
查看次数

Bloomberg API请求超时

设置了ReferenceDataRequest后,我将它发送到EventQueue

Service refdata = _session.GetService("//blp/refdata");
Request request = refdata.CreateRequest("ReferenceDataRequest");
// append the appropriate symbol and field data to the request
EventQueue eventQueue = new EventQueue();
Guid guid = Guid.NewGuid();
CorrelationID id = new CorrelationID(guid);
_session.SendRequest(request, eventQueue, id);
long _eventWaitTimeout = 60000;
myEvent = eventQueue.NextEvent(_eventWaitTimeout);
Run Code Online (Sandbox Code Playgroud)

通常情况下我可以从队列中获取消息,但我现在遇到的情况是,如果我在应用程序的同一次运行中(通常在第十个左右)发出大量请求,我会看到一个TIMEOUTEventType

if (myEvent.Type == Event.EventType.TIMEOUT)
    throw new Exception("Timed Out - need to rethink this strategy");
else
    msg = myEvent.GetMessages().First();
Run Code Online (Sandbox Code Playgroud)

这些是在同一个线程上进行的,但是我假设我正在消耗并且不释放的某个地方有某些东西.

有人有任何线索或建议吗?

关于SO对BLP的API的引用并不多,但希望我们可以开始纠正这种情况.

c# bloomberg blpapi eventqueue

5
推荐指数
2
解决办法
9955
查看次数

java swing清除事件队列

是否可以以标准方式执行此操作?

这是场景.

  1. 开始在EDT中做一些昂贵的事情(EDT被阻止,直到昂贵的操作结束).

  2. 当EDT被阻止时,用户继续单击/拖动鼠标按钮.所有鼠标操作都记录在某处.

  3. 当EDT是免费的(用昂贵的东西完成)时,它开始处理鼠标事件.

我在步骤3中想要的是丢弃堆积的鼠标事件.在EDT免费之后,任何新的鼠标事件都应该以通常的方式处理.

关于如何实现这一点的任何想法.

PS:我不可能阻止EDT被阻止(我不控制程序中某些模块的行为).

编辑:如果我可以安全地调用"SunToolkit.flushPendingEvents()",那么在开始EDT中的昂贵操作之前,我总是可以放一个玻璃板.在昂贵的操作结束后,在EDT线程上,冲洗所有事件 - 他们将进入一个不做任何事情的玻璃窗格.然后让EDT正常工作.

EDIT2:我添加了一个SSCCE来演示这个问题.


public class BusyCursorTest2 extends javax.swing.JFrame {

    public BusyCursorTest2() {

        javax.swing.JButton wait = new javax.swing.JButton("Wait 3 seconds");
        getContentPane().setLayout(new java.awt.GridLayout(2, 1, 0, 0));
        getContentPane().add(wait);
        getContentPane().add(new javax.swing.JToggleButton("Click me"));
        setTitle("Busy Cursor");
        setSize(300, 200);
        setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);

        wait.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent event) {

                final java.util.Timer timer = switchToBusyCursor(BusyCursorTest2.this);

                try {
                    //do something expensive in EDT
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        //do nothing
                    }
                } finally {
                    switchToNormalCursor(BusyCursorTest2.this, timer);
                } …

java swing eventqueue event-dispatch-thread

5
推荐指数
1
解决办法
7184
查看次数

PyQt4 - 按住检测到频繁按下和释放的键?

当 QApplication 处理关键事件时,我注意到一些不寻常的行为,这会危及我希望制作的小游戏。

按住一个键会导致keyPressEvent和 thenkeyReleaseEvent方法被重复(并且非常频繁地)调用,而不是触发keyPressEvent一次并等待释放键以触发另一个(这是期望的和公认的预期行为)。

这会导致巨大的性能问题,在某种程度上,按住多个键会导致某些键被程序完全忽略,大概是因为事件队列受到影响。

该程序演示了重复调用:

from PyQt4 import QtGui
import sys

class Window(QtGui.QWidget):

    def __init__(self):
        super(Window, self).__init__()

    def keyPressEvent(self, event):
        print 'PRESSED'
        event.accept()

    def keyReleaseEvent(self, event):
        print 'RELEASED'
        event.accept()

app = QtGui.QApplication(sys.argv)
Window().show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

这个程序(我用来测试 Qt 游戏潜力的一个愚蠢的图形东西)演示了在按住现有键时忽略新按下的键。

from PyQt4 import QtGui
import sys


class Window(QtGui.QWidget):

    def __init__(self):
        super(Window, self).__init__()
        self.resize(100,300)
        self.lower, self.upper = 10, -10
        self.keys = [81, 65, 90, 87, 83, 88, 69, 68, 67, 82, 70, 86, 84, 71,
        66, …
Run Code Online (Sandbox Code Playgroud)

python keypress pyqt4 eventqueue keyrelease

4
推荐指数
1
解决办法
3305
查看次数

等待调用invokeLater()

有没有更优雅的方式去做我在下面做的事情?也就是说,是否有比轮询和睡眠,轮询和睡眠更优雅的方式,等等,以便知道何时Runnable.run()通过调用方法invokeLater()

private int myMethod() {
    final WaitForEventQueue waitForQueue = new WaitForEventQueue();
    EventQueue.invokeLater(waitForQueue);
    while (!waitForQueue.done) {
        try {
            Thread.sleep(10);
        } catch (InterruptedException ignore) {
        }
    }

    return 0;
}

private class WaitForEventQueue implements Runnable {
    private boolean done;

    public void run() {
        // Let all Swing text stuff finish.
        done = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

java sleep polling eventqueue invokeandwait

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

从EDT更新是绝对规则还是有例外?

在Swing中,GUI应该仅由EDT更新,因为GUI组件不是线程安全的.

我的问题是,如果我有一个专门用于更新特定组件的EDT以外的单个线程,并且我的程序中的任何其他线程都不能访问该组件,只有这个专用线程,可以吗?在我的情况下,我有一个JTable和一个线程从网络接收信息并更新表(不使用EventQueue.invokeLater).所有其他组件都从EDT更新.到目前为止我还没有看到任何问题,我想知道最终是否会出现一个错误.

更新 我的目的是实时更新表格.数据不断来自网络,为此我专门为表格提供1个线程,以便在它们到来时更新它.如果我使用SwingUtilities.invokeLater,这意味着当EDT可用时将更新该表.不应该将swing用于实时更新要求吗?

java swing multithreading real-time eventqueue

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