2014-12-17 2 views
1

COM 포트의 배열을 사용하고 동적으로 차트에 표시하는 프로그램을 바탕 화면에 쓰고 있습니다. 프로그램은 다음과 같은 예외와 함께 실패 후 잠시 동안 고장없이 실행되지만 :스레드 "JavaFX 응용 프로그램 스레드"예외 java.lang.NullPointerException

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException 
at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:344) 
at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267) 
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:521) 
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:505) 
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$399(QuantumToolkit.java:334) 
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$40/432581434.run(Unknown Source) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$144(WinApplication.java:101) 
at com.sun.glass.ui.win.WinApplication$$Lambda$36/1963387170.run(Unknown Source) 
at java.lang.Thread.run(Thread.java:745) 

응용 프로그램이 계속 실행됩니다. 텍스트 파일에 데이터를 계속 저장하지만 닫기 버튼을 제외한 모든 버튼이 활성화되지 않습니다. 누구든지 아이디어가 있다면 도움을주십시오. 여기

이 몇 가지 코드

public class FXMLController implements Initializable { 

public static XYChart.Series<Number, Number> hourDataSeries; 

@FXML 
public Label label; 
@FXML 
public Label statusbar; 
@FXML 
public LineChart lineChart; 
@FXML 
public NumberAxis xAxis; 
@FXML 
NumberAxis yAxis; 
@FXML 
MenuItem close; 
@FXML 
MenuItem Options; 
@FXML 
MenuItem about; 
@FXML 
Button connect; 
@FXML 
public Label hexString; 

@FXML 
private void close(ActionEvent event) throws SerialPortException { 
    //COMConnect.serialPort.closePort(); 
    System.exit(0); 
} 

@FXML 
private void connect(ActionEvent event) { 
    OpenScene openScene = new OpenScene("/SceneCOM.fxml", "Options"); 
} 

@FXML 
private void showStatistics(ActionEvent event) { 
    OpenScene openScene = new OpenScene("/SceneStatistics.fxml", "Statistics"); 
} 

@FXML 
private void aboutit(ActionEvent event) { 
    OpenScene openScene = new OpenScene("/SceneAbout.fxml", "About"); 
} 

@FXML 
private void getconnect(ActionEvent event) { 

    if (COMConnect.b == true) { 
     COMConnect.b = false; 
     try { 
      COMConnect.serialPort.closePort(); 
     } catch (SerialPortException ex) { 
      Logger.getLogger(FXMLController.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     connect.setText("Connect"); 
    } else { 
     COMConnect.b = true; 
     COMConnect.comConnect(); 

    } 

} 

@Override 
public void initialize(URL url, ResourceBundle rb) { 

    hourDataSeries = new XYChart.Series<Number, Number>(); 
    label.textProperty().bind(COMConnect.EventListener.valueProperty); 
    COMConnect.connectProperty.setValue("Connect"); 
    connect.textProperty().bindBidirectional(COMConnect.connectProperty); 
    statusbar.textProperty().bind(Typewriter.status); 
    hexString.textProperty().bind(TypewriterHexString.hexStr); 
    xAxis.setLabel("Time"); 
    xAxis.setTickUnit(1); 
    xAxis.setTickLabelFormatter(new NSC()); 
    yAxis.setLabel("density," + superscript(" kg/m3")); 

    xAxis.setForceZeroInRange(false); 
    lineChart.setLegendVisible(false); 
    lineChart.setCursor(Cursor.CROSSHAIR); 
    lineChart.getData().add(hourDataSeries); 

} 

}

javafx.application.Platform.runLater(new Runnable() { 
         @Override 
         public void run() { 

          valueProperty.setValue(formatt(second) + superscript(" kg/m3")); 

          if (y > 10) { 
           hourDataSeries.getData().remove(0); 

          } 
          data = new XYChart.Data<Number, Number>(y, second); 
          data.setNode(new HoveredThresholdNode(0, second, "")); 
          hourDataSeries.getData().add(data); 
          System.out.println(hourDataSeries.getData().toString()); 
          y++; 
         } 
        }); 
       } 
+0

코드를 공유하십시오. 그렇지 않으면 어떤 일이 벌어지는 지 알 수 없습니다. –

+0

@ JoséPereda 프로그램은 22 초마다 COM 포트에서 데이터를 수신합니다. 오류 전 720 번 마지막 수신 데이터 그런 다음이 예외가 있습니다. 이것은 jre의 버그 일뿐입니다. – sabracadabra

+0

어떤 직렬 라이브러리를 사용하고 있습니까? –

답변

1

따라서 다른 클래스에서 선 차트에 데이터를 추가하고,이 솔루션은 매우 간단했다 :

lineChart.setAnimated(false); 

신청서 약 25 시간 동안 올바르게 작동합니다. 감사합니다.

관련 문제