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的引用