10

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);
        }
}
andih
  • 5,570
  • 3
  • 26
  • 36
Kevin Schultz
  • 886
  • 3
  • 20
  • 42
  • Well did you try following the instructions from the compiler? "Recompile with -Xlint:unchecked for details". – Jon Skeet Apr 14 '12 at 17:48
  • If you interested in further improvement, you could create enumeration with days of week, put all JRadioButton's in array and use enumeration indexes to access values from that array. – Vadim Ponomarev Apr 14 '12 at 18:04

2 Answers2

13

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.

ugo
  • 2,705
  • 2
  • 30
  • 34
0

Add generic parameter <String> for JComboBox and JList.

PS: use IDE with syntax highlighting. For example - JetBrains IDEA have free community edition.

Vadim Ponomarev
  • 1,346
  • 9
  • 15