2013-09-30 5 views
0

Может кто-нибудь помочь мне со следующим сообщением об ошибке (для кода в нижней части):Конструктор должен вызвать супер() или этот()

Exception in thread "AWT-EventQueue-0" java.lang.VerifyError: Constructor must call super() or this() before return in method org.jfree.ui.RectangleInsets.<init>()V at offset 0 
at org.jfree.chart.axis.Axis.<clinit>(Axis.java:153) 
at org.jfree.chart.StandardChartTheme.<init>(StandardChartTheme.java:233) 
at org.jfree.chart.StandardChartTheme.<init>(StandardChartTheme.java:319) 
at org.jfree.chart.ChartFactory.<clinit>(ChartFactory.java:231) 
at odesolver.ODESolver.createGraph(ODESolver.java:81) 
at odesolver.ODESolver.<init>(ODESolver.java:35) 
at odesolver.ODESolver$2.run(ODESolver.java:105) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 
BUILD SUCCESSFUL (total time: 2 seconds) 

, которая относится к следующим 3-х строк кода:

ODESolver.java:81

JFreeChart chart = ChartFactory.createXYLineChart(

ODESolver.java:35

createGraph(); 

ODESolver.java:105

new ODESolver(); // Let the constructor do the job 

Всего программ:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package odesolver; 

/** 
* 
* @author User 
*/ 
import java.awt.*;  // Using AWT containers and components 
import java.awt.event.*; // Using AWT events and listener interfaces 
import javax.swing.*; // Using Swing components and containers 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.ChartPanel; 
import org.jfree.data.general.Series; 

// A Swing GUI application inherits the top-level container javax.swing.JFrame 
public class ODESolver extends JFrame { 
    private JTextField tfInput, tfOutput; 
    private int numberIn; // input number 
    private int sum = 0; // accumulated sum, init to 0 

    /** Constructor to setup the GUI */ 
    public ODESolver() { 
     // Retrieve the content-pane of the top-level container JFrame 
     // All operations done on the content-pane 
     Container cp = getContentPane(); 
     cp.setLayout(new GridLayout(2, 2, 5, 5)); 

     createGraph(); 


     add(new JLabel("Enter an Integer: ")); 
     tfInput = new JTextField(10); 
     add(tfInput); 
     add(new JLabel("The Accumulated Sum is: ")); 
     tfOutput = new JTextField(10); 
     tfOutput.setEditable(false); // read-only 
     add(tfOutput); 

     // Allocate an anonymous instance of an anonymous inner class that 
     // implements ActionListener as ActionEvent listener 
     tfInput.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      // Get the String entered into the input TextField, convert to int 
      numberIn = Integer.parseInt(tfInput.getText()); 
      sum += numberIn;  // accumulate numbers entered into sum 
      tfInput.setText(""); // clear input TextField 
      tfOutput.setText(sum + ""); // display sum on the output TextField 
     } 
     }); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Exit program if close-window button clicked 
     setTitle("ODE Accumulator"); // "this" Frame sets title 
     setSize(350, 120); // "this" Frame sets initial size 
     setVisible(true); // "this" Frame shows 


    } 

    private JPanel createGraph() { 

     JPanel panel = new JPanel(); 
     XYSeries series = new XYSeries("MyGraph"); 
     series.add(0, 1); 
     series.add(1, 2); 
     series.add(2, 5); 
     series.add(7, 8); 
     series.add(9, 10); 


     XYSeriesCollection dataset = new XYSeriesCollection(); 
     dataset.addSeries(series); 

     JFreeChart chart = ChartFactory.createXYLineChart(
       "XY Chart", 
       "x-axis", 
       "y-axis", 
       dataset, 
       PlotOrientation.VERTICAL, 
       true, 
       true, 
       false 
       ); 
     ChartPanel chartPanel = new ChartPanel(chart); 


     panel.add(chartPanel); 

     return panel; 
    } 

    /** The entry main() method */ 
    public static void main(String[] args) { 
     // Run the GUI construction in the Event-Dispatching thread for thread-safety 
     SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      new ODESolver(); // Let the constructor do the job 
     } 
     }); 
    } 
} 

Может быть, проблема в том, что есть файлы в ODESolver ЦСИ и Лив с ошибками, как сообщает Netbeans (см скриншот ниже) , Я не знаю, какие файлы настроены так, чтобы иметь ошибки, поскольку ни у кого из них нет восклицательного знака на них, как обычно у них есть ошибки.

netbeans error

+0

я просто попытался это, но все еще получаю ту же ошибку –

+0

Добавление супер() в конструктор не будет иметь никакого эффекта.Когда суперконструктор явно не указан, компилятор по существу вставляет по умолчанию super() в качестве первой строки вашего конструктора. – Ron

+0

@SubhrajyotiMajumder AFAIK нет необходимости явно указывать это. Компилятор делает это для вас. Я полагаю, что по умолчанию супер() в начале конструктора явно не задано. –

ответ

0

проблема была решена путем добавления файлов фляги к классам, а не папка, содержащая их

4

Похоже, что Вы используете старую версию JFreeChart, которая производит эту ошибку. Обновление до версии 1.0.13 как найдено here

+0

На самом деле, я запускаю версию 16, но спасибо в любом случае. –

+1

Ran против 13 и отлично работал, позвольте мне проверить с 16 ... – Reimeus

+0

Предполагая, что ваша работа отлично с v 16, мне интересно, что вы делаете, что я нет, или наоборот. Кстати, я запускал старую версию JCommon (v8 в отличие от v 20): переключение с исправленной ошибкой super(), хотя в настоящее время есть несколько разных ошибок. –

-1

Различные конструкторы JFrame выполняют важную работу инициализации, что любой JFrame требуется. Поэтому каждый JFrame, который когда-либо создавался, должен иметь один из названных конструкторов. Но поскольку ODESolver также является JFrame, это относится и к объектам ODESolver.

К счастью, язык Java обеспечивает это. Мы не можем создать ODESolver, без вызова вызывающего конструктора JFrame. Способ, которым он применяется, заключается в том, что каждый конструктор ODESolver должен быть сопоставлен с конструктором JFrame.

Когда мы создадим ODESolver, один из конструкторов ODESolver будет вызван. Но этот конструктор должен указать, какой конструктор JFrame будет вызван. То, как это делается, - это одно из следующего.

  • указав явно который JFrame конструктор использовать, через вызов super(), с или без каких-либо аргументов;
  • , вызывающий другого конструктора ODESolver, по вызову this() с или без каких-либо аргументов.

В любом случае, вызов super() или this() должен быть первой строкой ODESolver конструктора.

+0

Я попытался поставить super() в качестве первой строки: он не решил ее. То, что избавилось от ошибки super() (но оставило меня со многими другими ошибками), заключалось в том, чтобы изменить версию JCommon, которую я использовал от 8 до 20. –

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