Следующий код показывает JavaFX
графики: Swing
. Код работает отлично, и все мои другие классы работают отлично. По какой-то причине, код представляет ошибки:Извлечение данных из файла с использованием нескольких экземпляров
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at ImportCSV.ExportData(ImportCSV.java:39)
at ImportCSV.Inportdata(ImportCSV.java:60)
at Bar.createAndPlotBarChart(Bar.java:9)
at ChartFrame.<init>(JavaChartDemo.java:29)
at JavaChartDemo$1.run(JavaChartDemo.java:13)
Когда я показываю две диаграммы (grid.add(scatter.getScatter(0),0,0);
) не компилировать и запускать, но когда я добавляю только одну диаграмму (либо гистограммы или диаграммы рассеяния), он компилируется и работает отлично. Это просто не имеет никакого смысла для меня. 3 прокомментированные строки вызывают ошибки, но они отлично работают, если мы раскомментируем их и прокомментируем экземпляры диаграммы рассеяния. Я предполагаю, что извлечение данных из файла в 2 экземплярах вызывает причину этой проблемы. Любые решения оцениваются.
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javax.swing.*;
import java.awt.*;
public class JavaChartDemo {
public static void main (String[] args){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ChartFrame mainFrame = new ChartFrame();
mainFrame.setVisible(true);
}
});
}
}
class ChartFrame extends JFrame {
JFXPanel fxPanel;
ScatterPlot scatter = new ScatterPlot();
//Bar barChart = new Bar();
public ChartFrame(){
initSwingComponents();
scatter.createAndPlotScatter();
//barChart.createAndPlotBarChart();
initFxComponents();
}
private void initSwingComponents(){
JPanel mainPanel = new JPanel(new BorderLayout());
fxPanel = new JFXPanel();
mainPanel.add(fxPanel, BorderLayout.CENTER);
JLabel titleLabel = new JLabel("Charts in Swing applications");
mainPanel.add(titleLabel, BorderLayout.NORTH);
this.add(mainPanel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800,400);
}
private void initFxComponents(){
Platform.runLater(new Runnable() {
@Override
public void run() {
GridPane grid = new GridPane();
Scene scene = new Scene(grid, 800, 400);
grid.add(scatter.getScatter(0),0,0);
//grid.add(barChart.getBarChart(8),2,0);
fxPanel.setScene(scene);
}
});
}
}
Поверьте мне, это ничто из этого, но я сначала подумал о том же. Я решил это. Решение состояло в том, чтобы выполнить извлечение данных один раз и использовать этот экземпляр для доступа к данным для разных графиков/диаграмм и т. Д. Я бы опубликовал весь свой код, чтобы показать, что это первый случай, когда я столкнулся с проблемой, где LITERALLY компилятор, было неправильно, из-за столкновений нескольких экземпляров, обращающихся к одному и тому же файлу, но я бы не стал, поскольку это оцениваемый проект. У класса импорта/экспорта данных нет никаких проблем, и он работает сейчас. – TheDerp
Что значит «компилятор ошибается?». Вы утверждаете, что байт ode, сгенерированный в файле класса, не соответствует исходному коду в вашем файле Java? –
@James_D Я могу сказать только, что stacktrace не предоставил фактические ошибки, так как код не попадает в пустую строку и пытается проанализировать это как float или любую из оставшихся упомянутых ошибок. Я сделал именно то, что я отправил в качестве ответа (я не модифицировал ни классы, ни файлы, кроме показанного), и все жалобы исчезли. Я смущен! – TheDerp