-1

I have two files which contains main function and one controller file for fxml and one file of performance.java which involves NewFXMain.java. Actually I have three array list in parameterSelectionController.java which i want to plot using NewFXMain.java which uses performance.java(which requires parameters to be passed is one line chart parameter, and three array list). But the problem is I am having two main file first I want to collect the parameters using parameterselectionmain.java after that I want o plot the line chart using second one which is NewFXMain.java.

Requirement:

1) Collect the parameter array list using parameterSelectionController.java.

2) plot the chart using the array lists using NewFXMain.java.

I. ParameterSelectionController.java

for(int i=0;i<arr.size();i++)
{
    if(arr.get(i)==null)
    {
        System.out.println("no value in" + arr.get(i));
    }
    else
    {
        refined.add(arr.get(i));
    }

}
final ArrayList ar = new ArrayList();
for(int i=0; i<refined.size();i++)
{
    System.out.println("you selected : " + refined.get(i));
    System.out.println("size of refined arraylist is " + refined.size());
}

Statement st = conn.createStatement();
System.out.println(engineList);
for(int j=0;j<engineList.size()+1;j++)
{ 

    ar.clear();
    String sql = "select * from Parameters_Detail where Engine_No=" + "\""+ engineList.get(0).get(j).toString().trim() + "\"";
    ResultSet rs = st.executeQuery(sql);
while(rs.next())
{  
    for(int i=0;i<refined.size();i++)
    {   
        ar.add(rs.getFloat(refined.get(i).toString()));
    }
}


for(int i=0;i<ar.size();i++)
{
    System.out.println(refined.get(i) + " column is having value : " +ar.get(i) + " for engine no: " + engineList.get(0).get(j));
}

    collection.add(new ArrayList(ar));
}
System.out.println(engineList.get(0));  //engine ArrayList
System.out.println(refined);           //refined ArrayList
System.out.println(collection);       //collection ArrayList
}
public ArrayList sendEnginesList()
 {
return (ArrayList)engineList;
 }
public ArrayList sendParameterList()
 {
return refined;
 }
public ArrayList sendParameterValues()
 {
return collection;
 }

ii.ParameterSelectionMain.java

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class ParameterSelectionMain extends Application {

@Override
 public void start(Stage stage) throws Exception{
    Parent root = FXMLLoader.load(getClass().getResource("ParameterSelectionFXML.fxml"));
    //stage.initStyle(StageStyle);
    stage.setTitle("Select parameters of your choice");
    stage.setScene(new Scene(root));
    stage.show();
}

/**
 * @param args the command line arguments
 */

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

}

iii.PERFORMANCE.java

import ParameterSelection.*;
import java.util.ArrayList;
import java.util.List;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.XYChart;

public class performance {

protected LineChart<String,Number> lineChart;
protected ArrayList parameters;
protected ArrayList<List> param;
protected ArrayList engines;
public XYChart.Series series = new XYChart.Series();



public performance(LineChart<String,Number> lineChart, ArrayList parameters, ArrayList<List> paramValues, ArrayList engines) {
    this.lineChart = lineChart;
    this.parameters = parameters;
    this.param = paramValues;
    this.engines = engines;

}

public void generateChart() {
for (int i = 0; i < engines.size(); i++) {
    XYChart.Series series = new XYChart.Series();
    series.setName(engines.get(i).toString());
    for (int j = 0; j < parameters.size(); j++) {
        series.getData().add(new XYChart.Data(parameters.get(j).toString(), param.get(i).get(j)));
    }
    lineChart.getData().add(series);
}
System.out.println(lineChart);
}

}

I WANT TO PLOT THE ABOVE DATA IN A LINE CHART USING NewFXMain.java which involves performance.java

iii. NewFXMain.java

import ParameterSelection.ParameterSelectionController;
import java.util.ArrayList; 
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.stage.Stage;

public class NewFXMain extends Application {

@Override 
public void start(Stage stage)
    {
    stage.setTitle("Performance Analysis");

    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();

    xAxis.setLabel("Values");
    //yAxis.setLabel("Engines");

    LineChart<String, Number> lineChart = new LineChart<String,Number>(xAxis,yAxis);

    Scene scene  = new Scene(lineChart,800,600); 

    lineChart.setTitle("Performance Analysis");



     ParameterSelectionController psc = new ParameterSelectionController();

     performance performvalues = new performance(lineChart, psc.sendParameterList(), psc.sendParameterValues(), (ArrayList)psc.sendEnginesList().get(0));
     performvalues.generateChart();

     stage.setScene(scene);
     stage.show();
    }    
public static void main(String[] args)
{
    launch(args);
}
}
  • 1
    It doesn't really make sense to have more than one `Application` class in an application. See https://stackoverflow.com/questions/32464698/java-how-do-i-start-a-standalone-application-from-the-current-one-when-both-are for ways to structure what (I think) you are trying to do. – James_D Jun 13 '17 at 12:41

1 Answers1

-1

Try something like this:

public class Main {
  public static final void main(String... args) {
    ParameterSelectionMain.main(args);
    NewFXMain.main(args);
  }
}
Usagi Miyamoto
  • 6,196
  • 1
  • 19
  • 33
  • In which file I should write this ? @Usagi Miyamoto – Sayed Awesh Rahman Jun 13 '17 at 12:43
  • 1
    Both main methods call launch, and [you can't call launch more than once](http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#launch-java.lang.String...-). – James_D Jun 13 '17 at 12:43
  • yes I guess, then what is the possible solution @James_D – Sayed Awesh Rahman Jun 13 '17 at 12:45
  • ya I saw that, can I send the 3 array lists to another package keeping NewFXMain.java and performance.java alone or is there any way to call the main function of NewFXMain.java inside parameterSelectionController.java? @James_D – Sayed Awesh Rahman Jun 13 '17 at 12:48
  • or can I make another stage using button inside controller to plot the graph?? – Sayed Awesh Rahman Jun 13 '17 at 12:53
  • 1
    @SayedAweshRahman Your comments indicate you need to read that other post more carefully. **There should only be one `Application` class** and one `main` method (and one `start()` method). "send 3 array lists to another package" makes no sense (you don't send things to packages, a package is essentially just a folder containing classes). – James_D Jun 13 '17 at 13:03