Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自另一个类的SerialPortEventListener_Java_Swing_Serial Port - Fatal编程技术网

Java 来自另一个类的SerialPortEventListener

Java 来自另一个类的SerialPortEventListener,java,swing,serial-port,Java,Swing,Serial Port,基本上,我的程序应该显示一个框架,在这个框架中,面板根据来自pc串行连接的“输入”数据(整数值)在屏幕上绘制一个点 问题是:如何将值从串行端口“传输”到另一个类框架并调用REPAINT()方法 假设我通过控制台通过UART正确地接收每个数据,我使用的方法是通过EventDriven…我得到的数据是正常的…它们在控制台中输出,我得到的值正好是我期望的值。但由于创建主框架和子面板的类是另一个类,如何在每次收到数据时从eventdriven例程调用repaint方法 以下是Main程序的代码(它显示框

基本上,我的程序应该显示一个框架,在这个框架中,面板根据来自pc串行连接的“输入”数据(整数值)在屏幕上绘制一个点

问题是:如何将值从串行端口“传输”到另一个类框架并调用REPAINT()方法

假设我通过控制台通过UART正确地接收每个数据,我使用的方法是通过EventDriven…我得到的数据是正常的…它们在控制台中输出,我得到的值正好是我期望的值。但由于创建主框架和子面板的类是另一个类,如何在每次收到数据时从eventdriven例程调用repaint方法

以下是Main程序的代码(它显示框架并在西侧创建子面板):

Hre是子面板的类(请注意,代码尚未完成…因为我无法在收到新数据时在面板上“读取”和重新绘制drwa):

下面是serialdata类的代码…(非常有效):

再一次…整个代码运行,但我让框架和子面板工作,在后台,通过串行连接获得的值,但在控制台中…

非常适合这样做。这里讨论并概述了一些相关的例子。另一方面,请确保在上构建GUI

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JRootPane;


public class ArtificialHorizon{

    /**
     * Artificial Horizont program
     * written in Java 1.6.12 (on Debian 5.0 Lenny)
     * 
     * @author wilhem
     * starting date: 15 Januar 2010
     * 
     * last update: 18 Januar 2010
     */


    /********************************
     * Getting the size of the screen
     ********************************/
    private Dimension dimScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
    private int xLocation;
    private int yLocation;


    /**************************
     * Definition of the frame
     * for the main application
     *************************/
    @SuppressWarnings("static-access")
    public void start(){
        JFrame mainFrame = new JFrame("Artificial Horizont");
        mainFrame.setUndecorated(true);
        mainFrame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setSize(1024, 768);
        xLocation = (dimScreenSize.width- mainFrame.getWidth()) / 2;
        yLocation = (dimScreenSize.height - mainFrame.getHeight()) / 2;
        mainFrame.setLocation(xLocation, yLocation);

        mainFrame.setResizable(true);
        mainFrame.setLayout(new BorderLayout());


        /********************************************
         * Creating the Left PANEL
         * which contains the Left Artificial Horizon
         * for FILTERED Outputs (Processed by Kalman)
         ********************************************/

        ArtificialHorizonPanel leftPanel = new ArtificialHorizonPanel();
        ArtificialHorizonPanel rightPanel = new ArtificialHorizonPanel();

        mainFrame.getContentPane().add(BorderLayout.WEST, leftPanel);

        mainFrame.setVisible(true);

        /************************************************
         * Create the class RS232 and the Object "serial"
         ***********************************************/
        SerialConnection serial = new SerialConnection("/dev/ttyUSB0", 9600);

    }



    public static void main(String[] args) {

        ArtificialHorizon artificialHorizon = new ArtificialHorizon();
        artificialHorizon.start();     // Starting the application

    }

}
import gnu.io.SerialPortEventListener;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;


public class ArtificialHorizonPanel extends JPanel{

    /************************************
     * In this Class the Artificial Horizon
     ************************************/

    /****************************
     * Defining instance variables
     ****************************/
    private Color blueSky;
    private Color orangeEarth;
    private Dimension dimPanel;
    private Point2D centerPoint;
    private int side = 4;


    /************************************
     * Thic constructor will create
     * the initial panel for the Horizon
     ************************************/
    public ArtificialHorizonPanel(){

        dimPanel = new Dimension(400, 700);
        setPreferredSize(dimPanel);
        setBackground(Color.black);

        centerPoint = new Point2D.Double(dimPanel.getWidth()/2, dimPanel.getHeight()/2);   // Create a point in the middle of the panel

        blueSky = new Color(10, 112, 156);
        orangeEarth = new Color(222, 132, 14);

    }

    public void paintComponent(Graphics g){

        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D)g;

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        Rectangle2D rect = new Rectangle2D.Double((centerPoint.getX() - side/2), (centerPoint.getY() - side/2), side, side);

        g2d.setPaint(Color.orange);
        g2d.draw(rect);

    }

}
import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.TooManyListenersException;



public class SerialConnection implements SerialPortEventListener{

    private Enumeration portList = null;
    private CommPortIdentifier portId = null;
    private String defaultPort = null;
    private boolean portFound = false;
    private int baudRate = 0;
    private SerialPort serialPort = null;
    private DataInputStream is = null;
    private BufferedReader inStream;



    /********************************
     * Constructor for the base class
     *******************************/
    public SerialConnection(String defaultPort, int baudrate){

        this.defaultPort = defaultPort;
        checkPorts();                     // Call a method for checking ports on the System

    }


    /************************************
     * This method checks the presence of
     * ports on the System, in affirmative
     * case initializes and configures it
     * to receive data on the serial port
     ***********************************/

    public void checkPorts(){

        /***************************************
         * Get a list of all ports on the system
         **************************************/
        portList = CommPortIdentifier.getPortIdentifiers();
        System.out.println("List of all serial ports on this system:");

        while(portList.hasMoreElements()){
            portId = (CommPortIdentifier)portList.nextElement();
            if(portId.getName().equals(defaultPort)){
                portFound = true;
                System.out.println("Port found on: " + defaultPort);

                initialize();       // If Port found then initialize the port

            }   
        }

        if(!portFound){
            System.out.println("No serial port found!!!");
        }
    }

    public void initialize(){
        /**********************
         * Open the serial port
         *********************/
        try{
            serialPort = (SerialPort)portId.open("Artificial Horizont", 2000);
        } catch (PortInUseException ex){
            System.err.println("Port already in use!");
        }

        // Get input stream
        try{
            is = new DataInputStream(serialPort.getInputStream());
        } catch (IOException e){
            System.err.println("Cannot open Input Stream " + e);
            is = null;
        }


        try{
            serialPort.setSerialPortParams(this.baudRate,
                                           SerialPort.DATABITS_8,
                                           SerialPort.STOPBITS_1,
                                           SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException ex){
            System.err.println("Wrong settings for the serial port: " + ex.getMessage());
        }


        try{
            serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
        } catch (UnsupportedCommOperationException ex){
            System.err.println("Check the flow control setting: " + ex.getMessage());
        }

        // Add an event Listener
        try{
            serialPort.addEventListener(this);
        } catch (TooManyListenersException ev){
            System.err.println("Too many Listeners! " + ev);
        }

        // Advise if data available to be read on the port
        serialPort.notifyOnDataAvailable(true);
    }


    /**********************************
     * Method from interface definition
     *********************************/
    public void serialEvent(SerialPortEvent event){

        inStream = new BufferedReader(new InputStreamReader(is), 5);
        String rawInput = null;

        switch(event.getEventType()){
        case SerialPortEvent.BI:
        case SerialPortEvent.CD:
        case SerialPortEvent.CTS:
        case SerialPortEvent.DSR:
        case SerialPortEvent.FE:
        case SerialPortEvent.OE:
        case SerialPortEvent.PE:
        case SerialPortEvent.RI:
        case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
            break;

        case SerialPortEvent.DATA_AVAILABLE:
            try {
                while((rawInput = inStream.readLine()) != null){
                    System.out.println(rawInput);
/*
!!!!!!!!!!!!!!!!!!!!!!!!!!!!HERE I GET THE VALUE FROM THE SERIAL PORT AND THOSE MUST BE "VISIBLE" TO THE SUBPANEL CLASS IN ORDER AND RUN THE METHOD REPAINT!!!!!!!!!!!!!!!!!!!!!
*/
                }

                inStream.close();

            } catch (IOException e) {
                e.printStackTrace();
                System.exit(-1);
            }
            break;

        default:
            break;

        }
    }

}