2013-03-30 4 views
1

나는 전화에서 직렬 입력을받는 Main.java이라는이 프로그램을 가지고 있습니다. 문제는 번호가 올바르게 표시되지만 기능이 BGMusicmaindc() 인 경우 if 조건입니다 (inputLine이 1 재생 인 경우 I.E. BGMusicmaindc()). 하지만 눌러 진 모든 키에 대해 음악을 재생 중입니다. 또한 else 문은 오류가 발견되면 '아니오'라고 말합니다.조건이 작동하지 않는 경우

참고 : 코드는 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"); 
    } 
} 

답변

5

이것은 if 문과 관련된 일반적인 오류입니다. 이 조건 문에서 ;를 제거하고 의도 한대로 작동합니다 :

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

을 : 당신은 좋은 눈을 가지고

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

: 당신은 또한 간단한 if 문 (내 개인적인 취향)을 사용할 수 있습니다 ! +1 – Barranka

관련 문제