精华内容
下载资源
问答
  • EDT_ClassifierProject-源码

    2021-03-26 17:34:24
    EDT_ClassifierProject
  • EDT_Project-源码

    2021-02-27 05:34:37
    EDT_Project
  • edt3il-源码

    2021-02-22 03:11:49
    edt3il
  • 用于1C的BSLLS连接器:EDT 该插件在开发环境中包括检查。 这增加了128+。 能力 代码检查 快速修复 任意链接 安装 打开Справка -> Установить новое ПО 。 输入链接: ...
  • DFT EDT手册 压缩解压缩原理及流程的详细讲解 EDT的产生流程,EDT在design中的插入流程
  • EDT CF生成器 插件用于CF / CFE文件的。 添加到1C:EDT功能: - Импорт нового проекта из cf/cfe-файла - Импорт изменений в существующий проек...
  • edt破解資源

    2015-11-26 23:50:24
    edt工具利器 你值得擁有 專門解封包附檔名edt
  • EDT Mobile Runtime

    2012-04-10 13:48:04
    EDT Mobile Runtime,使用本程序请更新到最新的EDT版本(0.8.0 nightly)
  • 我们在2008年最后一次解释了EDT背后的一些概念,因此,我们很高兴再次撰写有关EDT的文章,在开发人员指南以及Udemy的课程中都有关于EDT的部分,但是由于这是最重要的了解在Codename One中,它几乎没有重复。...

    edt和cst

    我们在2008年最后一次解释了EDT背后的一些概念,因此,我们很高兴再次撰写有关EDT的文章,在开发人员指南以及Udemy的课程中都有关于EDT的部分,但是由于这是最重要的了解在Codename One中,它几乎没有重复。

    关于EDT的好处之一是,其中的许多概念几乎与其他所有GUI环境(Swing / FX,Android,iOS等)中的概念相似。 因此,如果您能理解此说明,那么在其他平台上工作时也可能会有所帮助。

    代号一可以具有任意数量的线程,但是在代号一中内部为事件调度线程创建了一个名为“ EDT”的线程。 这个名称不会处理线程错误,因为它处理包括绘画等在内的所有操作。

    您可以将EDT想象成这样的循环:

    while(codenameOneRunning) {
         performEventCallbacks();
         performCallSeriallyCalls();
         drawGraphicsAndAnimations();
         sleepUntilNextEDTCycle();
    }

    在Codename One中,通常的经验法则是:每次Codename One可能在EDT上调用其方法(除非另有明确说明),每次在Codename One中调用的内容都应在EDT上(除非另有明确说明) 。

    有一些值得注意的特殊情况:

    1. NetworkManager / ConnectionRequest –在内部使用网络线程,而不是EDT。 但是,可以/应该从EDT调用它们。
    2. BrowserNavigationCallback –由于其独特的功能,必须在本机浏览器线程上调用它。
    3. 显示invokeAndBlock / startThread –创建全新的线程。

    除了这些,几乎所有东西都在EDT上。 如果不确定,可以使用Display.isEDT方法检查您是否在EDT上。

    违反EDT

    您可以通过两种主要方式违反EDT:

    1. 从不是EDT线程的线程(例如,网络线程或由您创建的线程)中以Codename One调用方法。
    2. 在EDT上执行CPU密集型任务(例如读取大文件)–这将有效地阻止所有事件处理,绘画等,使应用程序感觉很慢。

    幸运的是,我们在模拟器中有一个工具:EDT违规检测工具。 这样可以有效地打印堆栈跟踪,以怀疑是否违反了EDT。 它不是傻瓜,可能会使您误判,但是它应该可以帮助您解决一些难以发现的问题。

    那么如何防止EDT违规呢?

    为了防止滥用EDT线程(EDT上的慢速操作),只需使用new Thread(),Display.startThread或invokeAndBlock生成一个新线程(稍后再介绍)。
    然后,当您需要将更新广播回EDT时,可以使用callSerially或callSeriallyAndWait。

    致电

    callSerially调用它在事件调度线程上收到的runnable参数的run()方法。 如果您在单独的线程上,这将非常有用,但是当我们使用EDT并希望将操作推迟到EDT的下一个周期(在下一次有更多讨论)时,这也很有用。
    callSeriallyAndWait与串行调用相同,但是在返回之前,它会等待callSerially完成。 由于明显的原因,它不能在EDT上调用。

    在本迷你教程的第二部分中,我将讨论invokeAndBlock以及为什么我们已经在EDT上时为什么要使用callSerially。

    翻译自: https://www.javacodegeeks.com/2014/10/callserially-the-edt-invokeandblock-part-1.html

    edt和cst

    展开全文
  • Fixed some EDT issues

    2020-11-30 21:05:23
    <div><p>I looked into EDT bugs and found a few. Quite often they related to <code>AbstractWorker</code> it turned out. <p>If someone wants to find out more, add the following first in <code>main...
  • 0400 (EDT)), Date(Thu May 24 2012 00:00:00 GMT-0400 (EDT)), Date(Mon May 28 2012 00:00:00 GMT-0400 (EDT)), Date(Tue May 29 2012 00:00:00 GMT-0400 (EDT)), Date(Wed May 30 2012 00:00:00 GMT-0400 (EDT)),...
  • edt和cst 上一次我们讨论EDT时,我们介绍了一些基本概念,例如串行调用等。我们省略了两个更高级的主要概念。 调用并阻止 当我们用Java编写典型代码时,我们希望该代码按顺序排列: doOperationA(); ...

    edt和cst

    834427872
    上一次我们讨论EDT时,我们介绍了一些基本概念,例如串行调用等。我们省略了两个更高级的主要概念。

    调用并阻止

    当我们用Java编写典型代码时,我们希望该代码按顺序排列:

    doOperationA();
    doOperationB();
    doOperationC();

    这通常可以正常工作,但在EDT上可能会出现问题,如果其中一项操作缓慢,则可能会减慢整个EDT(绘画,事件处理等)的速度。 通常我们可以将操作移到单独的线程中,例如:

    doOperationA();
    new Thread() {
        public void run() {
             doOperationB();
        }
    }).start();
    doOperationC();

    不幸的是,这意味着操作C将与操作C并行发生,这可能是一个问题……例如,与其使用操作名称,不如使用一个“现实世界”示例:

    updateUIToLoadingStatus();
    readAndParseFile();
    updateUIWithContentOfFile();

    请注意,必须在EDT上执行第一个和最后一个操作,但是中间操作可能真的很慢!
    由于updateUIWithContentOfFile在执行新线程之前需要readAndParseFile是不够的。 我们的自动方法是执行以下操作:

    updateUIToLoadingStatus();
    new Thread() {
        public void run() {
              readAndParseFile();
              updateUIWithContentOfFile();
        }
    }).start();

    但是updateUIWithContentOfFile应该在EDT上执行,而不是在随机线程上执行。 因此,正确的方法是这样的:

    updateUIToLoadingStatus();
    new Thread() {
        public void run() {
              readAndParseFile();
              Display.getInstance().callSerially(new Runnable() {
                   public void run() {
                         updateUIWithContentOfFile();
                   }
              });
        }
    }).start();

    这是完全合法的并且可以合理地很好地工作,但是随着我们添加了越来越多的功能,而这些功能仅是3种方法,就需要串行地链接起来,因此它变得复杂了!

    调用和阻止以独特的方式解决了这一问题,您可以使用以下方法获得几乎完全相同的行为:

    updateUIToLoadingStatus();
    Display.getInstance().invokeAndBlock(new Runnable() {
        public void run() {
              readAndParseFile();
        }
    });
    updateUIWithContentOfFile();

    调用和阻止会以合法方式有效阻止当前的EDT。 它产生一个单独的线程来运行run()方法,并且当该run方法完成时,它会返回到EDT。 当invokeAndBlock运行时,所有事件和EDT行为仍然有效,这是因为invokeAndBlock()一直在内部调用主线程循环。

    请注意,这会稍微降低性能,并且不建议嵌套invokeAndBlocks(或过度使用它们)。 但是,它们在使用多个线程/ UI时非常方便。

    当我已经在EDT上时,为什么我要调用Serially?

    我们在上一篇文章中讨论了callSerially,但是一个被误解的主题之一就是为什么当我们仍然在EDT上时,我们总是想调用此方法。 如果在EDT上调用callSerially,则LWUIT的原始版本曾经引发IllegalArgumentException,因为这似乎没有意义。
    但是,这确实有一定道理,我们可以使用示例进行解释。 例如,说我们有一个按钮,该按钮具有与其事件相关的很多功能,例如:

    1. 用户添加了一个动作侦听器以显示一个对话框。
    2. 用户安装的框架向该按钮添加了一些日志记录。
    3. 该按钮在释放动画时重新绘制释放动画。

    但是,如果我们处理的第一个事件(对话框)可能导致以下事件发生问题,则可能会导致问题。 例如,对话框将阻止EDT(使用invokeAndBlock),事件将继续发生,但是由于事件“我们已经发生”,因此按钮将重新绘制,而框架日志将不会发生。 如果我们显示一个表单,该表单可能会触发依赖于仍然存在的当前表单的逻辑,那么也会发生这种情况。

    解决此问题的方法之一是仅用callSerially包装动作侦听器主体。 在这种情况下,callSerially会将事件推迟到EDT的下一个周期(循环),并让链中的其他事件完成。 请注意,您不应该通常使用此方法,因为它会增加开销,并使应用程序流程复杂化,但是,当您在事件处理中遇到问题时,建议尝试这样做以查看其原因。

    翻译自: https://www.javacodegeeks.com/2014/11/callserially-the-edt-invokeandblock-part-2.html

    edt和cst

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,201
精华内容 1,680
关键字:

EDT