javagui串口通信
我有一个类,它从串行端口接收和发送信息:javagui串口通信,java,swing,serial-port,runnable,Java,Swing,Serial Port,Runnable,我有一个类,它从串行端口接收和发送信息: public class Terminal implements Runnable { static LinkedList<String> receiver = new LinkedList<String>(); public Terminal() { //... } public String getReceivedMessage() { Strin
public class Terminal implements Runnable
{
static LinkedList<String> receiver = new LinkedList<String>();
public Terminal()
{
//...
}
public String getReceivedMessage()
{
String data = receivedMessfges.removeFirst();
return data;
}
// Other function that perform connection to COM port
// ...
}
使用第三类将信息从终端
传送到Gui
的正确方法是什么:
public class Monitor
{
static Gui gui;
static terminal terminal;
public static void main(String args[])
{
monitor = new Monitor();
}
public Monitor()
{
gui = new Gui();
terminal = new Terminal();
}
// Functions, that get information COM port
// using getReceivedMessage() function
// and display it on Gui
}
谢谢)您可以使用外部接口,如将数据写入文件并从中读取….您可以使用外部接口,如将数据写入文件并从中读取….您可以使用外部接口,例如将数据写入文件并从中读取…您可以使用外部接口,例如将数据写入文件并从中读取…我将使用
监视器
类在Gui
和终端
之间进行通信
如果receivedMessfges.removeFirst()
在收到应显示在gui中的完整消息之前不会返回,您可以执行以下操作:
Thread messageChecker = new Thread(new Runnable() {
public void run() {
while (!Thread.isInterrupted()) {
String message = terminal.getReceivedMessage();
// Prepare message for gui display
SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui.methodToDisplayTheReceivedMessage(message);
}
}
}
}
}).start();
在监视器
类中的某个位置
该代码执行以下操作:
- 创建新的可运行(匿名类)
- 使用
方法run()
- 检查螺纹是否已中断
- 如果有,停止
- 如果没有,请等待,直到我们收到来自的新消息并将其发送到gui
- 使用
- 创建一个新线程集,以执行新Runnable的
方法run()
- 开始这个线程
- 将线程的引用分配给变量
messageChecker
messageChecker.interrupt()代码>
另一方面,如果,terminal.getReceivedMessage()代码>只返回部分消息,即在调用之前接收到的消息,我认为最好的方法是使用观察者模式
- 使终端类实现接口
- 使Monitor类实现接口
然后,您需要编写代码,在终端类有一条完整消息时立即通知观察者。我建议在终端类内部有一个线程,定期检查新数据。一旦有完整的消息,它应该调用notifyobservators(message)
(其中message
显然是包含完整消息的String
类型的变量)
在Monitor类中,您必须有一个更新(Observable o,Object arg)
方法来满足observator
接口:
// In the Monitor class
void update(Observable terminal, Object message) {
SwingUtilities.invokeLater(new Runnable() {
gui.methodToDisplayTheReceivedMessage((String)message); // This cast is safe, since we only ever call notifyObservers() with a string argument.
}
}
最后但并非最不重要的一点是,您需要调用terminal.addObserver(this)代码>来自监视器类(可能来自构造函数),否则notifyobservators()
将通知所有0观察者,并且不会发生任何事情
用谷歌搜索“java观察者模式”可以获得大量有用的资源和示例,以备您进一步了解。我将使用监视器
类在Gui
和终端之间进行通信
如果receivedMessfges.removeFirst()
在收到应显示在gui中的完整消息之前不会返回,您可以执行以下操作:
Thread messageChecker = new Thread(new Runnable() {
public void run() {
while (!Thread.isInterrupted()) {
String message = terminal.getReceivedMessage();
// Prepare message for gui display
SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui.methodToDisplayTheReceivedMessage(message);
}
}
}
}
}).start();
在监视器
类中的某个位置
该代码执行以下操作:
- 创建新的可运行(匿名类)
- 使用
run()
方法
- 检查螺纹是否已中断
- 如果有,停止
- 如果没有,请等待,直到我们收到来自的新消息并将其发送到gui
- 创建一个新线程集,以执行新Runnable的
run()
方法
- 开始这个线程
- 将线程的引用分配给变量
messageChecker
要停止线程,只需调用messageChecker.interrupt()代码>
另一方面,如果,terminal.getReceivedMessage()代码>只返回部分消息,即在调用之前接收到的消息,我认为最好的方法是使用观察者模式
- 使终端类实现接口
- 使Monitor类实现接口
然后,您需要编写代码,在终端类有一条完整消息时立即通知观察者。我建议在终端类内部有一个线程,定期检查新数据。一旦有完整的消息,它应该调用notifyobservators(message)
(其中message
显然是包含完整消息的String
类型的变量)
在Monitor类中,您必须有一个更新(Observable o,Object arg)
方法来满足observator
接口:
// In the Monitor class
void update(Observable terminal, Object message) {
SwingUtilities.invokeLater(new Runnable() {
gui.methodToDisplayTheReceivedMessage((String)message); // This cast is safe, since we only ever call notifyObservers() with a string argument.
}
}
最后但并非最不重要的一点是,您需要调用terminal.addObserver(this)代码>来自监视器类(可能来自构造函数),否则notifyobservators()
将通知所有0观察者,并且不会发生任何事情
用谷歌搜索“java观察者模式”可以获得大量有用的资源和示例,以备您进一步了解。我将使用监视器
类在Gui
和终端之间进行通信
如果receivedMessfges.removeFirst()
在收到应显示在gui中的完整消息之前不会返回,您可以执行以下操作:
Thread messageChecker = new Thread(new Runnable() {
public void run() {
while (!Thread.isInterrupted()) {
String message = terminal.getReceivedMessage();
// Prepare message for gui display
SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui.methodToDisplayTheReceivedMessage(message);
}
}
}
}
}).start();
在监视器
类中的某个位置
该代码执行以下操作:
- 创建新的可运行(匿名类)
- 使用
run()
方法
- 检查螺纹是否已中断
- 如果有,停止
- 如果没有,请等待,直到我们收到来自的新消息并将其发送到gui
- 创建一个新线程集,以执行新Runnable的
run()
方法
- 开始这个线程
- 指定一个对th的引用