2013-09-30 46 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,SRC和lib与错误的文件,,因为NetBeans报告(见下面的截图) 。我不知道哪些文件是错误的,尽管它们都没有感叹号,因为它们通常会有错误。

netbeans error

+0

我只是想该文件夹解决,但是仍然得到同样的错误 –

+0

添加超()来构造不会有任何效果。当没有明确指定superconstructor时,编译器实际上会将默认的super()作为构造函数的第一行插入。 – Ron

+0

@SubhrajyotiMajumder AFAIK没有必要明确指定。编译器会为你做这件事,即在构造函数的开头放置一个默认的super()没有明确指定。 –

回答

0

问题通过添加jar文件到类路径,而不是包含它们

4

你似乎是运行老版本的JFreeChart产生这个错误。升级到1.0.13版本发现here

+0

实际上,我运行的是版本16,不过谢谢。 –

+1

冉对13和工作正常,让我检查16 ... – Reimeus

+0

假设你的工作正常与V 16,我想知道你在做什么,我不是或反之亦然。顺便说一句,我正在运行旧版本的JCommon(v8而不是v20):切换修复了super()错误,尽管现在有一些不同的错误。 –

-1

JFrame各种构造做重要工作的初始化,任何JFrame需要。因此,创建的每个JFrame都必须具有其中一个调用的构造函数。但是因为ODESolver也是JFrame,它也适用于ODESolver对象。

幸运的是,Java语言强制执行此操作。如果没有调用JFrame构造函数之一,我们不能创建ODESolver。它强制执行的方式是要求将每个ODESolver构造函数映射到JFrame构造函数。

当我们创建一个ODESolver时,其中一个ODESolver构造函数会被调用。但是该构造函数必须指定将调用哪个构造函数。它的做法是通过执行以下任一操作。

  • 明确指定使用哪个JFrame构造,通过调用super(),具有或不具有一些参数;
  • 调用另一个ODESolver构造函数,通过调用this(),有或没有一些参数。

在任一情况下,呼叫到super()this()必须是ODESolver构造函数的第一行。

+0

我试着把super()作为第一行:它没有解决它。什么消除了super()错误(但让我有许多其他错误)是改变我使用的JCommon版本从8到20。 –

相关问题