【发布时间】:2022-01-20 09:01:21
【问题描述】:
我正在尝试在 Vaadin-Java 中创建一个回合制纸牌游戏,到目前为止一切顺利,但我在将 Vaadin 图像推送到其他 UI 时遇到了问题。我确实从 Vaadin 文档中复制了 Broadcast/BroadcasterView 类,它按预期工作,但不适用于图像。
public class Broadcaster {
static Executor executor = Executors.newSingleThreadExecutor();
static LinkedList<Consumer<String>> listeners = new LinkedList<>();
public static synchronized Registration register(
Consumer<String> listener) {
listeners.add(listener);
return () -> {
synchronized (Broadcaster.class) {
listeners.remove(listener);
}
};
}
public static synchronized void broadcast(String message) {
for (Consumer<String> listener : listeners) {
executor.execute(() -> listener.accept(message));
}
}
}
@Push
@Route("broadcaster")
public class BroadcasterView extends Div {
VerticalLayout messages = new VerticalLayout();
Registration broadcasterRegistration;
// Creating the UI shown separately
@Override
protected void onAttach(AttachEvent attachEvent) {
UI ui = attachEvent.getUI();
broadcasterRegistration = Broadcaster.register(newMessage -> {
ui.access(() -> messages.add(new Span(newMessage)));
});
}
@Override
protected void onDetach(DetachEvent detachEvent) {
broadcasterRegistration.remove();
broadcasterRegistration = null;
}
}
public BroadcasterView() {
TextField message = new TextField();
Button send = new Button("Send", e -> {
Broadcaster.broadcast(message.getValue());
message.setValue("");
});
HorizontalLayout sendBar = new HorizontalLayout(message, send);
add(sendBar, messages);
}
上面的代码对于字符串、Vaadin 图标等都可以正常工作,但是当我替换为并自然地更改广播方法时,没有任何反应。
我已经在整个互联网上搜索了解决方案,但似乎人们不需要推送图像,或者这里根本不可能。我认为这可能是有效载荷的问题,但即使对于 5px x 5px 图像也不起作用
也许你们中的一个人遇到过这样的问题并找到了解决方案?
【问题讨论】:
-
处理图像的代码在哪里?您如何从 Vaadin 访问它们?
标签: image websocket vaadin push broadcast