user2225343
user2225343

Reputation: 17

If condition is not working

I have this program called Main.java which takes the serial input from the phone. The problem is the numbers are shown correctly, but the function BGMusicmaindc() is given under if condition (I.E. if inputLine is 1 play BGMusicmaindc()). But it is playing music for all keys which are pressed. Also the else statement gives error saying no if found.

Note: Code is in public synchronized void serialEvent(SerialPortEvent oEvent).

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.io.File;
import java.io.FileInputStream;
import java.lang.String;
import java.util.Enumeration;
import javax.swing.JOptionPane;
import sun.audio.AudioData;
import sun.audio.AudioDataStream;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;


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 code page independent
    */
    public BufferedReader input;
    /** The output stream to the port */
    public 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 static String inputLine;
    public synchronized void serialEvent(SerialPortEvent oEvent) {
        if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try {
                inputLine=input.readLine();
                                System.out.println(inputLine);

                                if (Main.inputLine.equals("1"));
                        {
                           BGMusicmaindc();
                        }
else
    System.out.println("");
            }
                        catch (Exception e) {
            //  System.err.println(e.toString());

            }
        }
        // Ignore all the other eventTypes, but you should consider the other ones.
    }

        public void BGMusicmaindc() { //Plays the background music
            //make a new AudioPlayer.
              AudioPlayer mynewBackgroundPlayer = AudioPlayer.player;

              AudioDataStream myLooop = null;
            //use a try block in case the file doesn't exist.
              try {
              AudioStream mynewBackgroundMusic = new AudioStream(new FileInputStream(new File(getClass().getResource(
                      "welcome.wav").toURI())));
              AudioData mynewData = mynewBackgroundMusic.getData();
              myLooop = new AudioDataStream(mynewData);
              }
              catch(Exception error) {JOptionPane.showMessageDialog(null, "Invalid file!");}

              // play background music.
              mynewBackgroundPlayer.start(myLooop);
        }

    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");
    }
}

Upvotes: 1

Views: 170

Answers (1)

syb0rg
syb0rg

Reputation: 8247

This is a common error I see with if statements not working. Remove the ; in this condition statement, and it should work as intended:

if (Main.inputLine.equals("1"));  // <---- remove that ;
{
    BGMusicmaindc();
}

Note: You could also use a simple if statement (my personal preference):

if (Main.inputLine.equals("1")) BGMusicmaindc();

Upvotes: 5

Related Questions