How to call a string to appear in another class

空扰寡人 提交于 2019-12-25 05:31:39

问题


I have this class called Main. java. In this the output is shown by inputLine which is a string taken serially from the com port. i want this string value to be used in some other class which is in the same default package. How do i call this string in other class. How do i create an instance of this class and call the string inputLine in any other xyz.java class. An example would be very helpful.

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import gnu.io.CommPortIdentifier;
    import gnu.io.SerialPort;
    import gnu.io.SerialPortEvent;
    import gnu.io.SerialPortEventListener;
    import java.util.Enumeration;


public class Main implements SerialPortEventListener
{
    SerialPort serialPort;
        /** The port we're normally going to use. */
    private static final String PORT_NAMES[] = {
            "COM30", // Windows
    };
    /**
    * A BufferedReader which will be fed by a InputStreamReader
    * converting the bytes into characters
    * making the displayed results codepage independent
    */
    private BufferedReader input;
    /** The output stream to the port */
    private OutputStream output;
    /** Milliseconds to block while waiting for port open */
    private static final int TIME_OUT = 2000;
    /** Default bits per second for COM port. */
    private static final int DATA_RATE = 9600;

    public void initialize() {
        CommPortIdentifier portId = null;
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

        //First, Find an instance of serial port as set in PORT_NAMES.
        while (portEnum.hasMoreElements()) {
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
            for (String portName : PORT_NAMES) {
                if (currPortId.getName().equals(portName)) {
                    portId = currPortId;
                    break;
                }
            }
        }
        if (portId == null) {
            System.out.println("Could not find COM port.");
            return;
        }

        try {
            // open serial port, and use class name for the appName.
            serialPort = (SerialPort) portId.open(this.getClass().getName(),
                    TIME_OUT);

            // set port parameters
            serialPort.setSerialPortParams(DATA_RATE,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);

            // open the streams
            input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
            output = serialPort.getOutputStream();

            // add event listeners
            serialPort.addEventListener(this);
            serialPort.notifyOnDataAvailable(true);
        } catch (Exception e) {
            System.err.println(e.toString());
        }
    }

    /**
     * This should be called when you stop using the port.
     * This will prevent port locking on platforms like Linux.
     */
    public synchronized void close() {
        if (serialPort != null) {
            serialPort.removeEventListener();
            serialPort.close();
        }
    }

    /**
     * Handle an event on the serial port. Read the data and print it.
     */
    public synchronized void serialEvent(SerialPortEvent oEvent) {
        if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try {
                String inputLine=input.readLine();
                System.out.println(inputLine);

            } catch (Exception e) {
                System.err.println(e.toString());
            }
        }
        // Ignore all the other eventTypes, but you should consider the other ones.
    }

    public static void main(String[] args) throws Exception {
        Main main = new Main();
        main.initialize();
        Thread t=new Thread() {
            public void run() {
                //the following line will keep this app alive for 1000 seconds,
                //waiting for events to occur and responding to them (printing incoming messages to console).
                try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
            }
        };
        t.start();
        System.out.println("Started");
    }
}

回答1:


In your case, you should just create a class variable. Just declare inside the class, public static String inputLine; Change String inputLine=input.readLine(); to inputLine=input.readLine(); and you can access it from other classes in the same package using Main.inputLine.




回答2:


First of all the variable has to be either an instance variable or a class variable if you want to access it somewhere else, variables created within a method can only exist inside of that method and will die as soon as the method returns.

In order to access the variable from another class you have to make it available, there are no friends in Java as in C++. You have 3 options.

  • Create a public instance variable, then provide a reference to the instance to those that need to access the information.
  • Create a private instance variable and public setter/getter methods to access it from the outside, then provide a reference to the instance to those that need to access the information.
  • Create a public static (class) variable.



回答3:


Sounds like the Observer Pattern for me...

Create an Interface eg. SerialListener that every class to be informed implements. The interface has one method with string parameter that is called by your Main Class every time new information arrives. And of cause the main class has methods to register new listeners and stores them in a list

List toBeCalled = new ArrayList()

Just like other Listeners in Swing etc.



来源:https://stackoverflow.com/questions/15716011/how-to-call-a-string-to-appear-in-another-class

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!