2016-03-05 2 views
0

Следующий код показывает 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); 
      } 
     }); 

    } 
} 

ответ

1

Никто не может вам помочь, вы не предоставили достаточной информации.

Однако стекловидность прозрачная. Что-то случилось в классе Bar, в нем используется ImportCSV, импорт и экспорт (?) Происходят в классе импорта, и вы пытаетесь преобразовать пустую строку в число. Это ваша проблема.

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) 

У stacktrace действительно есть вся информация, необходимая для решения этой проблемы.

+0

Поверьте мне, это ничто из этого, но я сначала подумал о том же. Я решил это. Решение состояло в том, чтобы выполнить извлечение данных один раз и использовать этот экземпляр для доступа к данным для разных графиков/диаграмм и т. Д. Я бы опубликовал весь свой код, чтобы показать, что это первый случай, когда я столкнулся с проблемой, где LITERALLY компилятор, было неправильно, из-за столкновений нескольких экземпляров, обращающихся к одному и тому же файлу, но я бы не стал, поскольку это оцениваемый проект. У класса импорта/экспорта данных нет никаких проблем, и он работает сейчас. – TheDerp

+1

Что значит «компилятор ошибается?». Вы утверждаете, что байт ode, сгенерированный в файле класса, не соответствует исходному коду в вашем файле Java? –

+0

@James_D Я могу сказать только, что stacktrace не предоставил фактические ошибки, так как код не попадает в пустую строку и пытается проанализировать это как float или любую из оставшихся упомянутых ошибок. Я сделал именно то, что я отправил в качестве ответа (я не модифицировал ни классы, ни файлы, кроме показанного), и все жалобы исчезли. Я смущен! – TheDerp

Смежные вопросы