Im new to programming and following this tutorial for a weather gui app in java. Below is the very small amount of code I'm working with so far. Where I am getting errors is at the "super("Weather App");" line.
import javax.swing.*;
public class WeatherAppGui extends JFrame
{
public WeatherAppGui
{
//GUI and title
super("Weather App");
//kill app on closure
setDefaultCloseOperation(EXIT_ON_CLOSE);
//dimensions
setSize(450, 650);
//load gui to center screen
setLocationRelativeTo(null);
//manually position gui components
setLayout(null);
//no resizing
setResizable(false);
}
}
What is going on underneath the hood that is causing "Canonical constructor cannot delegate to another constructor"? If the super keyword means to reference a parent classes (JFrame in this situation) method and thats where the error is coming up at... then why is IntelliJ speaking of constructors if a constructor is something that basically just holds an objects attribute's (parameters) until the constructor is called when the object is created and the object gets its attributes(arguments) (in layman's terms).
A constructor should have a parameter list after the name of the class. You should write:
public WeatherAppGui() {
// ...
}
Note the parentheses after the name of the class. That is an empty parameter list.
Without the parentheses, the compiler parses this as a canonical constructor, which is something that record classes can have, but is not allowed inside a regular class like WeatherAppGui
. So the error message is a bit confusing.
If you remove the super
constructor call, "WeatherAppGui" would be highlighted red instead, and IntelliJ (not sure about other IDEs) would say "Parameter list expected", which is a much more useful error message.