【问题标题】:How to communicate between two instances of the same page in GWT如何在 GWT 中同一页面的两个实例之间进行通信
【发布时间】:2011-08-05 22:31:54
【问题描述】:

我的 GWT 应用程序需要使用此处描述的基于浏览器的上传上传到 YouTube http://code.google.com/apis/youtube/2.0/developers_guide_java.html#Browser_based_Upload 上传完成后,我需要 YouTube 重定向到我上传视频的同一页面,以便通知用户上传完成。

出于这个原因,我正在设置这样的表单操作(ytPost 用于存储从 YouTube 收到的令牌和 PostUrl)。

form.setAction(ytPost.getPostUrl()+ "?nexturl="+Window.Location.getHref().toString());

根据我在 Eclipse 中看到的情况,这发生在一个名为 - Daemon Thread [Code server for fyiapp from Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.16) Gecko/20110319 的线程中http://127.0.0.1:8888/FyiApp.html?gwt.codesvr=127.0.0.1:9997#tab=plan&item=69 @ _brp1HJ[BO$Y~rSZ] 上的 Firefox/3.6.16 (.NET CLR 3.5.30729; .NET4.0C)(运行中)

当 YouTube 重定向回我开始上传的同一页面时,问题就出现了,但 GWT 实例化了一个名为 -

的新线程

守护线程 [来自 Mozilla/5.0 的 fyiapp 代码服务器(Windows;U;Windows NT 6.0;en-US;rv:1.9.2.16)Gecko/20110319 Firefox/3.6.16 (.NET CLR 3.5.30729;. NET4.0C) on http://127.0.0.1:8888/FyiApp.html?gwt.codesvr=127.0.0.1:9997#tab=plan&item=69 @ _brp1HJ[BO$Y~rSZ] (暂停(PostEditor 中第 104 行的断点))

因此,即使从技术上讲,我在“同一页面”代码方面(GWT 客户端)是我发起初始 YouTube 上传请求的地方,但该页面没有任何我需要通知用户的状态YouTube 上传已完成。我可以发出 Window.alert,或写入状态栏,但所有小部件都是全新的。

这两个线程从此时开始继续运行。

我应该怎么做才能在启动上传的同一线程上接收 YouTube 重定向,或者如果这不可能,我应该如何在同一浏览器页面的两个实例之间传递信息?

【问题讨论】:

    标签: java gwt youtube-api


    【解决方案1】:

    如何引入一个额外的参数,finished=true | false 所以你的“setAction”看起来像:

    form.setAction(ytPost.getPostUrl()+ "?nexturl=" +
      Window.Location.getHref().toString()+"&finished=true");
    

    以便在上传完成时将参数“finished=true”传递到您的页面,并对其做出反应。

    【讨论】:

    • 谢谢你,萨沙。我的问题是不了解如何在代表同一页面的两个不同线程之间进行通信。一个线程是原始线程——它正在等待答案,并在上传完成时检查 YouTube 注入的 URL 字符串中的额外参数。 GWT 在接收到来自 YouTube 的 GET(重定向)请求时创建另一个线程。这个在 YouTube 注入的 URL 中有额外的参数。所以我的问题归结为:我应该怎么做才能将这些参数传递回我正在等待它们的原始线程?
    • Larisa,你可以使用 java.util.concurrent.FutureTask 在线程之间异步传递参数。也就是说,在等待异步通信时保持主线程打开可能不是一个坏主意。这可能会使您的线程服务器饿死。
    • 我意识到我采取了错误的方法。我需要一个 Servlet 来在服务器上捕获来自 YouTube 的重定向,并将返回的上传视频的 id(附加到 URL)存储在数据库中。此外,我需要从我发起 YouTube 上传的页面定期检查数据库中的这些信息。感谢您的帮助!
    • 很高兴听到这个消息。如果您的问题得到解决,请考虑“接受”答案(绿色复选框)。
    猜你喜欢
    • 2011-04-13
    • 2016-03-15
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2018-12-02
    相关资源
    最近更新 更多