I am completing a lab assignment for school and get this error when I compile. The program runs fine, bit would like to fix what is causing the error. The program code and the complete error is below. Thanks as always!
Error: Note: F:\Java\Lab 8\Lab8.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
public class Lab8 extends JFrame {
public Lab8()
{
// Create an array of Strings for age ranges
String[] ageRanges = {"Under 20", "20-29", "30-39", "40-49", "50-59", "60 and Above"};
JComboBox jcbo = new JComboBox(ageRanges);
// Create an array of String destinations
String[] destination = {"Mercury", "Venus", "Moon", "Mars", "Jupiter / Europa", "Saturn / Triton", "Pluto + Sharon"};
JList jlst = new JList();
// Declare radio buttons
JRadioButton jrbMonday, jrbTuesday, jrbWednesday, jrbThursday, jrbFriday;
// Create a textfield
JTextField jMsg = new JTextField(10);
// Create panel to hold label and textbox.
JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout(5,0));
p1.add(new JLabel("Name: "), BorderLayout.WEST);
p1.add(new JTextField(20), BorderLayout.CENTER);
jMsg.setHorizontalAlignment(JTextField.LEFT);
// Create combobox panel.
JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(2,0,5,5));
p2.add(p1, BorderLayout.NORTH);
p2.add(new JComboBox(ageRanges), BorderLayout.CENTER);
p2.setBorder(new TitledBorder("Passenger Name & Age Range"));
//Create listbox panel.
JPanel p3 = new JPanel();
p3.setLayout(new GridLayout(1, 0));
p3.add(new JList(destination));
p3.setBorder(new TitledBorder("Destinations"));
// Create a new panel to hold radio buttons.
JPanel r1 = new JPanel();
r1.setLayout(new GridLayout(3,2));
r1.add(jrbMonday = new JRadioButton("Monday"));
r1.add(jrbTuesday = new JRadioButton("Tuesday"));
r1.add(jrbWednesday = new JRadioButton("Wednesday"));
r1.add(jrbThursday = new JRadioButton("Thursday"));
r1.add(jrbFriday = new JRadioButton("Friday"));
r1.setBorder(new TitledBorder("Departure Days"));
// Create a radio button group to group five buttons
ButtonGroup group = new ButtonGroup();
group.add(jrbMonday);
group.add(jrbTuesday);
group.add(jrbWednesday);
group.add(jrbThursday);
group.add(jrbFriday);
// Create grid to hold contents
JPanel pMain = new JPanel();
pMain.setLayout(new BorderLayout(5,0));
add(r1, BorderLayout.CENTER);
add(p2, BorderLayout.NORTH);
add(p3, BorderLayout. EAST);
}
public static void main(String[] args)
{
Lab8 frame = new Lab8();
frame.pack();
frame.setTitle("Lab 8 Application");
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(425, 275);
frame.setVisible(true);
}
}
You can resolve this warning message by using generics with Collections. In our example, we should use ArrayList<String> rather than ArrayList() . When you will compile above code, you won't get warning message anymore. That's all about how to fix uses unchecked or unsafe operations.
By "recompile with -Xlint", the compiler means to inform you that you need to recompile your program like this: javac -Xlint abc.java. If you do so, the compiler will tell you which methods are deprecated so you can remove your calls to them.
What this means is that the Java compiler has noticed some potentially unsafe issues with your code and is warning you. These issues are normally very trivial and you could carry on with them; especially since this is school work. But to find the issues, you should compile again with: javac -Xlint:unchecked Lab8.java
like the compiler says.
The issues in this file are that you haven't specified the type of object the JComboBox and JList are dealing with. Since you are only dealing with Strings in the JComboBox and JList, you should specify that. Read up on Java generics and this for more information.
Change
String[] ageRanges = {"Under 20", "20-29", "30-39", "40-49", "50-59", "60 and Above"};
JComboBox jcbo = new JComboBox(ageRanges);
to
String[] ageRanges = {"Under 20", "20-29", "30-39", "40-49", "50-59", "60 and Above"};
JComboBox<String> jcbo = new JComboBox<String>(ageRanges);
Also change:
p2.add(new JComboBox(ageRanges), BorderLayout.CENTER);
p2.setBorder(new TitledBorder("Passenger Name & Age Range"));
to
p2.add(new JComboBox<String>(ageRanges), BorderLayout.CENTER);
p2.setBorder(new TitledBorder("Passenger Name & Age Range"));
Finally change
//Create listbox panel.
JPanel p3 = new JPanel();
p3.setLayout(new GridLayout(1, 0));
p3.add(new JList(destination));
to
//Create listbox panel.
JPanel p3 = new JPanel();
p3.setLayout(new GridLayout(1, 0));
p3.add(new JList<String>(destination));
Edit:
Not recommended for production code, but to bypass these warnings use:
@SuppressWarnings("unchecked")
Just add this above any method that makes unsafe operations. For instance, I think you could put it above your main method in this code like so:
@SuppressWarnings("unchecked")
public static void main(String[] args) {
...
This would suppress the warnings.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With