java - java编译中未经检查或不安全的操作错误?

标签 java

<分区>

我正在完成学校的实验作业,在编译时遇到此错误。程序运行良好,bit 想修复导致错误的原因。程序代码和完整错误如下。一如既往的感谢!

错误: 注意:F:\Java\Lab 8\Lab8.java 使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。

代码:

   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);
        }
}

最佳答案

这意味着 Java 编译器已经注意到您的代码存在一些潜在的不安全问题并向您发出警告。这些问题通常是非常微不足道的,您可以继续处理它们;特别是因为这是学校作业。但是要找到问题,您应该像编译器所说的那样使用:javac -Xlint:unchecked Lab8.java 再次编译。

此文件中的问题是您没有指定 JComboBox 和 JList 正在处理的对象类型。由于您只处理 JComboBox 和 JList 中的字符串,因此您应该指定它。继续阅读 Java genericsthis获取更多信息。

改变

String[] ageRanges = {"Under 20", "20-29", "30-39", "40-49", "50-59", "60 and Above"};
JComboBox jcbo = new JComboBox(ageRanges);

String[] ageRanges = {"Under 20", "20-29", "30-39", "40-49", "50-59", "60 and Above"};
JComboBox<String> jcbo = new JComboBox<String>(ageRanges);

同时改变:

p2.add(new JComboBox(ageRanges), BorderLayout.CENTER);
p2.setBorder(new TitledBorder("Passenger Name & Age Range"));

p2.add(new JComboBox<String>(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));

//Create listbox panel.
JPanel p3 = new JPanel();
p3.setLayout(new GridLayout(1, 0));
p3.add(new JList<String>(destination));

编辑:

不推荐用于生产代码,但要绕过这些警告,请使用:

@SuppressWarnings("unchecked") 

只需将此添加到任何进行不安全操作的方法之上。例如,我认为您可以将它放在这段代码中的主要方法之上,如下所示:

@SuppressWarnings("unchecked") 
public static void main(String[] args) {
...

这会抑制警告。

关于java - java编译中未经检查或不安全的操作错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10155871/

相关文章:

java - 为什么我的代码修改了错误的数组?

java路径独立

java - Spring-MVC:JSP <form action> View 将一系列值发送到 Controller ,而不是单击按钮的一个值

java - 在键盘存在时隐藏 ‘Bottom Navigation Bar’ - Android

java - 无论情况如何,如何检查 Map 中的 key ?

java - 从 JComboBox 选择项目时显示 Jtree?

java - 使用 Oracle、Hibernate 和 Spring...没有返回数据

java - 最大 Java 内存 + TOMCAT + 144GB 内存的服务器

java - @Consumes注解抛出异常,如何处理

java - spring应用程序无法使用slf4j-log4j初始化日志记录