2016-01-20 14 views
0

我編寫了一個程序,它使用Areachart顯示波形。當我編譯它並運行它時,它看起來像下面一樣好。當我執行.jar文件時,我得到一個完整的我的波形的不同視圖。以不同的視圖運行.jar結果

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.concurrent.ConcurrentLinkedQueue; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javafx.animation.AnimationTimer; 
import javafx.animation.Timeline; 
import javafx.application.Application; 
import static javafx.application.Application.launch; 
import javafx.scene.Scene; 
import javafx.scene.chart.AreaChart; 
import javafx.scene.chart.NumberAxis; 
import javafx.scene.chart.XYChart.Data; 
import javafx.scene.chart.XYChart.Series; 
import javafx.stage.Stage; 


public class AreaChartSample extends Application { 

private static final int MAX_DATA_POINTS = 500; 

private Series series; 
private int xSeriesData = 0; 
private ConcurrentLinkedQueue<Number> dataQ = new ConcurrentLinkedQueue<>(); 
private ExecutorService executor; 
private AddToQueue addToQueue; 
private Timeline timeline2; 
private NumberAxis xAxis; 

private int time_counter=0; 
private int [] data_array=null; 

private void init(Stage primaryStage) { 

    String line,full_text=""; 

    try { 
     BufferedReader in = new BufferedReader(new FileReader("C:/testvideo/test.txt")); 

     while((line=in.readLine())!= null) 
     { 
      full_text+=line; 
     } 

     data_array=new int[full_text.length()]; 
     for(int i=0;i<full_text.length();i++) 
     { 
      data_array[i]=((int)(full_text.charAt(i)))-127; 
      // data_array[i]=((int)(full_text.charAt(i)))-300; 
     } 
    } catch (Exception e) { 
    } 



    xAxis = new NumberAxis(0,MAX_DATA_POINTS,MAX_DATA_POINTS/10); 
    xAxis.setForceZeroInRange(false); 
    xAxis.setAutoRanging(false); 

    NumberAxis yAxis = new NumberAxis(-127,127,1); 

    yAxis.setAutoRanging(false); 

    //-- Chart 
    final AreaChart<Number, Number> sc = new AreaChart<Number, Number>(xAxis, yAxis) { 
     // Override to remove symbols on each data point 
     @Override protected void dataItemAdded(Series<Number, Number> series, int itemIndex, Data<Number, Number> item) {} 
    }; 
    sc.setAnimated(false); 
    sc.setId("liveAreaChart"); 
    sc.setTitle("Animated Area Chart"); 

    //-- Chart Series 
    series = new AreaChart.Series<Number, Number>(); 
    series.setName("Area Chart Series"); 
    sc.getData().add(series); 

    primaryStage.setScene(new Scene(sc)); 
} 

@Override public void start(Stage primaryStage) throws Exception { 
    init(primaryStage); 
    primaryStage.show(); 

    //-- Prepare Executor Services 
    executor = Executors.newCachedThreadPool(); 
    addToQueue = new AddToQueue(); 
    executor.execute(addToQueue); 
    //-- Prepare Timeline 
    prepareTimeline(); 

    primaryStage.setOnCloseRequest(e -> { 
     executor.shutdown(); 
    }); 


} 

public static void main(String[] args) { 
    launch(args); 
} 

private class AddToQueue implements Runnable { 
    public void run() { 
     try { 
      // add a item of random data to queue 
      dataQ.add(data_array[time_counter]); 
      time_counter+=100; 
      Thread.sleep(10); 
      executor.execute(this); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(AreaChartSample.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

//-- Timeline gets called in the JavaFX Main thread 
private void prepareTimeline() { 
    // Every frame to take any data from queue and add to chart 
    new AnimationTimer() { 
     @Override public void handle(long now) { 
      addDataToSeries(); 
     } 
    }.start(); 
} 

private void addDataToSeries() { 
    for (int i = 0; i < 20; i++) { //-- add 20 numbers to the plot+ 
     if (dataQ.isEmpty()) break; 
     Number y=dataQ.remove(); 
     series.getData().add(new AreaChart.Data(xSeriesData++, y)); 
     // System.out.println(y); 
    } 
    // remove points to keep us at no more than MAX_DATA_POINTS 
    if (series.getData().size() > MAX_DATA_POINTS) { 
     series.getData().remove(0, series.getData().size() - MAX_DATA_POINTS); 
    } 
    // update 
     xAxis.setLowerBound(xSeriesData-MAX_DATA_POINTS); 
     xAxis.setUpperBound(xSeriesData-1); 
} 

}

當我剛運行它=>

enter image description here

當我執行構建.jar文件(窗口7 64位 - > java8)

enter image description here

我絕對不知道爲什麼這個可以發生。

更新:這裏是test.txt的:http://expirebox.com/download/bf9be466e23c4c3d8f73f094f261dfbe.html

UPDATE2

好它必須與file.when的閱讀做我改變

data_array[i]=((int)(full_text.charAt(i)))-127; 

data_array[i]=data_array[i]=((int)('f'))-127; 

它是t他在兩個「版本」中都是一樣的。

是否有另一種方法可以讀取正確的兩種方式。也許它與UTF8左右?

+0

文件'C:\ testvideo \ test.txt'的內容是什麼? – Andremoniy

+0

讀者在兩種情況下是否讀取完全相同的字符串值? – Berger

+0

是的,它使用相同的文件。 test.txt的內容就像「yq〜{z〜{{〜t {zs {〜x {{z} w〜{〜x {」 – user3776738

回答

0

這個技巧。謝謝!

String fileName = "C:/testvideo/test.txt"; 
FileInputStream is = new FileInputStream(fileName); 
InputStreamReader isr = new InputStreamReader(is, "UTF-8"); 
BufferedReader in = new BufferedReader(isr); 
相關問題