当前位置: 首页 > 面试题库 >

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

孟永望
2023-03-14
问题内容

我正在完成学校的实验任务,并且在编译时出现此错误。该程序运行良好,有点想修复导致错误的原因。程序代码和完整的错误如下。一如既往的感谢!

错误:注意: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泛型和这个以获取更多信息。

更改

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")

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

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

这样可以消除警告。



 类似资料:
  • 问题内容: 我被分配去做一个程序,该程序获取0-25之间的100个随机整数并将它们存储在数组中。然后,我必须调用2种方法来将偶数和几率分开(非常典型)。所以我尝试了ArrayList东西(我认为是学到的),在我遇到这个问题之前,它似乎还不错(我正在关注教程和在线内容): Unit8.java使用未经检查或不安全的操作 我的代码是这样的: } 与存在的具体的错误: 和 请帮我解决这个问题,我已尽力使

  • 其中T是类型变量: java:93:警告:[rawtypes]发现原始类型:可比较的私有类Customer extends JPanel实现可比较{^ 泛型类可比性缺少类型参数,其中T是类型变量: 6个警告

  • 为了介绍本章内容,我们借用官方文档的一句话, “在基本代码中尽可能减少不安全的代码”(”one should try to minimize the amount of unsafe code in a code base.”)。记住这句话,接着我们进入学习!在 Rust 中,不安全代码块是用于避开编译器的保护策略;具体地说,不安全代码块主要有 4 方面内容: 解引用裸指针 通过 FFI 调用函数

  • 问题内容: 例如: 问题答案: 如果你使用的是不带类型说明符的集合(例如,而不是),则在Java 5及更高版本中会出现这种情况。这意味着编译器无法使用泛型以类型安全的方式检查你是否正在使用集合。 要消除警告,只需具体说明你要在集合中存储的对象类型。所以,代替 采用 在Java 7中,你可以使用Type Inference缩短通用实例化。

  • 问题内容: 在我的spring应用程序上下文文件中,我有类似以下内容: 在java类中,实现如下所示: 在Eclipse中,我看到一条警告: 类型安全性:未经检查的从Object到HashMap的转换 我做错什么了?我该如何解决该问题? 问题答案: 好吧,首先,你正在通过新的HashMap创建调用浪费内存。你的第二行完全忽略了对此创建的哈希图的引用,从而使该哈希图可用于垃圾收集器。因此,不要这样做

  • 问题内容: 在我的spring应用程序上下文文件中,我有类似以下内容: 在java类中,实现如下所示: 在Eclipse中,我看到一条警告: 类型安全性:未经检查的从Object到HashMap的转换 我做错了什么?我该如何解决该问题? 问题答案: 好吧,首先,你正在通过新的HashMap创建调用浪费内存。你的第二行完全忽略了对此创建的哈希图的引用,从而使该哈希图可用于垃圾收集器。因此,不要这样做