JavaFx对EDT的回答?
我问了一个关于在GUI中使用线程的问题,得到了以下回答: 你必须修改你的程序JavaFx对EDT的回答?,java,multithreading,javafx-2,scenebuilder,Java,Multithreading,Javafx 2,Scenebuilder,我问了一个关于在GUI中使用线程的问题,得到了以下回答: 你必须修改你的程序 GUI元素应在GUI线程(EDT)内更新 仅限于,而不是来自独立线程 客户端连接应分为两个弱连接部分: 发送和接收消息。接收应该是一个单独的过程 线程,发送可以是线程或类 接收线程读取消息后,将其发送到EDT 使用SwingUtilities.invokeLater(Runnable)。可以找到一些例子 其他地方 当用户输入文本时,文本被发送到套接字 直接,或在队列中排队,然后由发送 线程,如果有的话 我想知道的是Ja
- 请注意,如果重要的话,我已经在javaFx场景生成器中构建了GUI
Platform.runLater(java.lang.Runnable-Runnable)
接收消息时,您可以更改UI(显示消息),但这会使UI滞后,因此最好从单独的线程执行密集型操作
因此,您可以通过调用newthread(task).start()来定义任务并触发新线程代码>。在Task anonymous类中,可以添加一个侦听器,在收到消息时更新UI。一个任务可以包含以下内容,您可以监听它们
使用来自和使用stateProperty侦听器的任务的示例代码
Task task = new Task<Void>() {
@Override public Void run() {
static final int max = 1000000;
for (int i=1; i<=max; i++) {
updateProgress(i, max);
}
return null;
}
};
ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
Task Task=新任务(){
@重写公共无效运行(){
静态最终整数最大值=1000000;
对于(inti=1;i您是否在JavaFX中查找对应的SwingUtil.invokeLater。如果是,则为
Platform.runLater(java.lang.Runnable)
引用API
在某个时间在JavaFX应用程序线程上运行指定的Runnable
未指定未来的时间
我如何知道何时运行任务?我目前正在创建一个任务程序,并且我只需要在一个或多个聊天人员出现问题时更新gui,例如聊天文本,或者如果有新人连接到聊天室,我指的是聊天程序(抱歉,键入错误).好的,让我直说吧!我创建了一个名为client listner的新类,它扩展了线程,然后在我的gui controllere中创建了一个任务,并将其作为参数传递给我的线程??或者它如何工作?我使用Smack API在Eclipse中传递消息和构建双曲线。在您的控制器中,建立连接,为TA定义一个匿名类k、 通过如下方式添加PacketListener代码来重写其运行方法-if(connection!=null){PacketListener=new PacketListener(){public void processPacket(Packet Packet){Message Message Message=(Message)Packet Packet Packet;if(Message.getType()==Message.Type.chat)startChat(Message);}};PacketFilter=new PacketTypeFilter(Message.class);connection.addPacketListener(listener,filter);}
并调用新线程(task.start();
。我真的很高兴您的回复:)并感谢您的帮助。我可以通过skype向您寻求帮助吗?这样我就知道我走在正确的轨道上了?:)会帮我很多忙的!
task.stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue<? extends State> observable,
State oldValue, Worker.State newState) {
if(newState==Worker.State.SUCCEEDED){
//doSomething()
}
}
});