gpt4 book ai didi

java - 在 Java 中制作我自己的事件的正确方法是什么

转载 作者:行者123 更新时间:2023-11-30 06:21:34 24 4
gpt4 key购买 nike

我是学生,我和几个 friend 一起做项目。我的任务是制作类库之类的东西。这个库中的类应该为我的 friend 提供 API,他们必须使 GUI 成为应用程序的一部分。 GUI 可以由任何工具包制作(Swing、JavaFX、SWT、AWT,都应该可以,事实上,即使没有 GUI,它也应该可以)。我需要制作等待数据从网络到达的类。我不知道什么时候数据会到达,UI 必须在等待期间响应,所以我把它放在不同的线程中。现在的问题是如何让 GUI 在数据到达时做出响应。好吧,我认为这是异步事件,GUI 应该注册事件处理程序,我应该在事件发生时调用该方法。我提出了这个解决方案:

interface DataArrivedListener{
void dataArrived(String data);
}

class Waiter{
private DataArrivedListener dal;
public void setDataArrivedListener(DataArrivedListener dal){
this.dal = dal;
}

void someMethodThatWaitsForData(){
// some code goes here

data = bufRdr.readLine();

//now goes important line:

dal.dataArrived(data);

// other code goes here

}


}

我的问题是:我应该用这样的东西替换“重要”行吗:

java.awt.EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
dal.dataArrived(data);
}
});

或者类似的东西:

javafx.Platform.runLater(new Runnable(){
@Override
public void run(){
dal.dataArrived(data);
}
});

或者也许我应该做一些完全不同的事情?

问题是我不确定其中哪一个适用于任何类型的用户界面。如果它是 GUI,则 dataArrived() 可能会对 GUI 进行更改,并且无论它是什么类型的 GUI,都应该在屏幕上正确绘制此更改。我还认为,如果我“稍后调用此代码”会更好,这样我的 someMethodThatWaitsForData() 方法可以触发事件并继续工作。

感谢您的帮助。

最佳答案

这是一个 Event Listener我前一段时间写的文章。这篇文章解释了如何编写自己的事件监听器。

你是对的,如果你想让你的库与任何 GUI 一起工作,你想写你自己的事件监听器。

我最熟悉 Swing,所以是的,您将拥有如下所示的 GUI 代码:

button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent event){
dal.buttonPressed(data);
}
});

关于java - 在 Java 中制作我自己的事件的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20377855/

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