2010-07-07 40 views
5

Tôi không chắc liệu điều này có khả thi hay không, đặc biệt là khi Java chạy qua máy ảo, nhưng tôi có thể gọi gnuplot từ bên trong Java không? Có lẽ tôi có thể mở Java một thiết bị đầu cuối và nhậpGọi gnuplot từ java? (ubuntu)

gnuplot 
plot ... 

etc?

Trả lời

20

Sử dụng gnujavaplot.

+0

Hoàn hảo! Cảm ơn bạn. – rhombidodecahedron

+1

Tôi chỉ bị lừa khi tôi thấy câu trả lời này. :) –

+2

dự án không hoạt động –

3

Nếu bạn có thể lấy gnuplot để lấy tất cả đầu vào từ dòng lệnh hoặc đầu vào tiêu chuẩn (hoặc đọc từ tệp) và ghi đầu ra của nó vào tệp, thì sẽ không có vấn đề gì khi sử dụng ProcessBuilder.

+0

tôi đã làm một cái gì đó tương tự như một thời gian trở lại. Tôi mơ hồ về các chi tiết, nhưng tôi có thể xác nhận Gnuplot rất vui khi slurp tất cả các đầu vào của nó từ các tập tin. Nó rất dễ đọc. –

1

này hoạt động trên Debian:

String[] s = {"/usr/bin/gnuplot", 
       "-e", 
       "set term jpeg large size 800,600;set autoscale; set grid;set format y \"%0.f\";set output \"plot.jpg\";set xdata time;set timefmt \"%Y-%m-%d-%H:%M:%S\";set xlabel \"Dates\";set ylabel \"Data transferred (bytes)\";plot \""+x+"\" using 1:2 title \"Total:"+tot+"\" with linespoints;" 
      }; 
try { 
    Runtime rt = Runtime.getRuntime(); 
    Process proc = rt.exec(s); 
    InputStream stdin = proc.getErrorStream(); 
    InputStreamReader isr = new InputStreamReader(stdin); 
    BufferedReader br = new BufferedReader(isr); 
    String line = null; 
    while ((line = br.readLine()) != null) 
     System.err.println("gnuplot:"+line); 
    int exitVal = proc.waitFor(); 
    if (exitVal != 0) 
     log("gnuplot Process exitValue: " + exitVal); 
    proc.getInputStream().close(); 
    proc.getOutputStream().close(); 
    proc.getErrorStream().close(); 
} catch (Exception e) { 
    System.err.println("Fail: " + e); 
} 
1

Sử dụng thư viện JavaGnuplotHybrid.

Trọng lượng rất nhẹ (chỉ có 3 lớp lõi) và cho phép lập trình lai với Java và Gnuplot.

  1. lập trình lai với Java và Gnuplot
  2. trọng lượng rất nhẹ (chỉ có ba lớp lõi)
  3. Sử dụng thẻ trong mã Gnuplot để thực hiện chức năng hoặc nhận giá trị lĩnh vực trong Java.
  4. Hỗ trợ cả chạy đồng bộ và không đồng bộ của Gnuplot trong Java. (Đồng bộ: chương trình java của bạn sẽ đợi cho đến khi bạn đóng popped cửa sổ Gnuplot; asynchronized: bạn java chương trình sẽ không chờ đợi.)
  5. Capture lỗi/đầu ra văn bản bình thường của Gnuplot đến nhà ga java đang
  6. đọc Gnuplot từ tệp xml
  7. Hỗ trợ mẫu mã Gnuplot.

Để biết thêm chi tiết:

  1. trang dự án: https://github.com/mleoking/JavaGnuplotHybrid
  2. Ví dụ: https://github.com/mleoking/JavaGnuplotHybrid/blob/master/javagnuplothybrid/doc/examples.md
+1

Có kho lưu trữ maven không? Tôi sẽ không đặt một cái lọ vào dự án của tôi. – ahll