gpt4 book ai didi

java - 另一个线程的监听器

转载 作者:行者123 更新时间:2023-12-01 15:55:14 25 4
gpt4 key购买 nike

我有一个具有 GUI 和 TCP 服务器的应用程序。 TCP 服务器在不同的线程中运行,当它收到某个数据包时,它应该开始播放视频文件(来自 MediaPlayer 对象)。问题是,作为 GUI 组件,只有从主线程调用视频才可能显示。我在主类中添加了一个监听器类:

Class RequestListener implements NBRequestListener{  /* NBRequestListener is the interface */
public void onRequestArrived(String request) {
processRequest(request); /* This method will run the video */
}

我在主线程中创建了一个监听器,并将其设置为服务器中的监听器:

RequestListener listener = new RequestListener();
server.setRequestListener(listener);

服务器中的代码是:

public void setRequestListener(_listener) {
listener = _listener; } /* listener is defined as RequestListener */

事件的调用(在服务器中)很简单:

listener.onRequestArrived(input_from_client);

但是监听器方法是在服务器线程中调用的,而不是在主线程中调用的,因此我收到异常:java.lang.reflect.InitationTargetException。您能帮忙指出一下问题吗?

最佳答案

解决这个问题的方法有多种,这里有两种:

  1. 在您的 Activity 中使用处理程序。例如,当您从后台线程收到需要播放视频的通知时,您可以向 Activity 的处理程序发送一条消息。自定义处理程序中的代码可以在 UI 线程上运行。这是一个教程(来自很多)http://www.helloandroid.com/taxonomy/term/43

  2. 当后台线程获取数据包时,广播一个 Intent(上下文类上的 startBroadcast())。在您的 Activity 中注册此广播的接收器。

关于java - 另一个线程的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com