当前位置: 首页 > 知识库问答 >
问题:

“使用未经检查或不安全的操作”警告

阎弘
2023-03-14
public class SleepingBarbers extends JPanel implements ActionListener{

    private ImageIcon asleep=new ImageIcon("barberAsleep.gif"),awake=new ImageIcon("barberAwake.gif");

    private static BufferedImage[][] images=new BufferedImage[1][8];

    private JButton addCustomer;

    private BufferedImage backdrop;

    private javax.swing.Timer timer=new javax.swing.Timer(30, this);

    private LinkedList<Customer> customers=new LinkedList<Customer>(), 
    seatedAtQueue=new LinkedList<Customer>();

    private boolean queued[]=new boolean[3], seated[]=new boolean[3];

    private int customerCount=1, left=0, served=0;

    private Barber barbers[]=new Barber[3];

    private JLabel leftLabel=new JLabel("0"), servedLabel=new JLabel("0");


    public SleepingBarbers() throws IOException{
        super();
        setLayout(null);
        for(int ctr=0; ctr<3; ctr++){
            try{
                barbers[ctr]=new Barber();
                add(barbers[ctr]);
            }catch(IOException e){}
        }
        for(int ctr=0; ctr<8; ctr++){
            try{
                images[0][ctr]=ImageIO.read(new File("char"+0+"_"+ctr+".gif"));
            }catch(Exception e){}
        }
        backdrop=ImageIO.read(new File("barbersBack.jpg"));
        leftLabel.setForeground(Color.WHITE);
        add(leftLabel);
        leftLabel.setBounds(615,483,100,20);
        servedLabel.setForeground(Color.WHITE);
        add(servedLabel);
        servedLabel.setBounds(615,470,100,20);

        addCustomer=new JButton(new ImageIcon("addCust.jpg"));
        add(addCustomer);
        addCustomer.addActionListener(this);
        addCustomer.setBounds(487,530,263,29);
        addCustomer.setRolloverIcon(new ImageIcon("addCustOver.jpg"));
        addCustomer.setPressedIcon(new ImageIcon("addCustPressed.jpg"));
        addCustomer.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
        barbers[0].setBounds(92,112,30,130);
        barbers[1].setBounds(71,235,30,130);
        barbers[2].setBounds(49,354,30,130);

        timer.start();
    }

    public void actionPerformed(ActionEvent e){
        Object src=e.getSource();
        timer.stop();
        if(src==addCustomer){
            Customer currentCust=new Customer((int)(Math.random()*1));
            add(currentCust);
            customers.add(currentCust);
            currentCust.setBounds(500,80,40,130);

        }
        if(src==timer&&!customers.isEmpty()){
            Collections.sort(customers);
            for(int ctr=0; ctr<customers.size(); ctr++){
                remove(customers.get(ctr));
            }
            for(int ctr=0; ctr<customers.size(); ctr++){
                add(customers.get(ctr));
            }
            for(int ctr=0; ctr<customers.size(); ctr++){
                for(int ctr1=0; ctr1<seatedAtQueue.size(); ctr1++){
                    (seatedAtQueue.get(ctr1)).findBarber();
                }
                (customers.get(ctr)).animate();
                if((customers.get(ctr)).exit){
                    remove(customers.get(ctr));
                    customers.remove(ctr);
                    //System.out.println("cutomer size "+customers.size());
                }
            }
        }
        repaint();
        validate();
        timer.restart();
    }

    private class Customer extends JPanel implements Comparable{
        private int  character, atQueue, move, time, barberNo;
        private boolean beenQueued, exit, atBarber, sit, done;
        private BufferedImage image;
        private LinkedList actions=new LinkedList<String>(), motions=new LinkedList<Integer>();
        //private Integer moveX, moveY;

        private Customer(int c){
            super(new BorderLayout());
            character=c;
            setOpaque(false);
            motions.add(2);
            actions.add("down");
            actions.add("enter");
            image=images[c][0];
        }

        public void animate(){
            if(!actions.isEmpty()){
                if(!motions.isEmpty()) move=(Integer)motions.getFirst();
                //System.out.println(move+" moving ");
                if(actions.getFirst().equals("down")){
                    setLocation(getX(), getY()+4);
                    if(!done)image=images[character][0];
                    else image=images[character][6];
                    move--;
                }else if(actions.getFirst().equals("up")){
                    setLocation(getX(), getY()-4);
                    image=images[character][1];
                    move--;
                }else if(actions.getFirst().equals("left")){
                    image=images[character][3];
                    setLocation(getX()-4, getY());
                    move--;
                }else if(actions.getFirst().equals("right")){
                    if(!done)image=images[character][2];
                    else image=images[character][7];
                    setLocation(getX()+4, getY());
                    move--;
                }else if(actions.getFirst().equals("exit")){
                    exit=true;
                    if(!atBarber){
                        left++;
                        leftLabel.setText(""+left);
                    }
                    return;
                }else if(actions.getFirst().equals("sit")){
                    if(!sit){
                        sit=true;
                        setLocation(getX(), getY()-1);
                        image=images[character][4];
                    }
                }
                if(actions.getFirst().equals("cut")){
                    image=images[character][4];
                    setOpaque(false);
                    if(time==5100){
                        done=true;
                        served++;
                        servedLabel.setText(""+served);
                        actions.removeFirst();
                        //System.out.println("waiting "+time);
                        seated[barberNo]=false;
                        barbers[barberNo].sleep();
                        motions.add(20);
                        actions.add("right");
                        if(barberNo==0){
                            motions.add(64);
                            actions.add("down");
                        }else if(barberNo==1){
                            motions.add(33);
                            actions.add("down");
                        }else if(barberNo==2){
                            motions.add(3);
                            actions.add("down");
                        }
                        motions.add(50);
                        actions.add("right");
                        motions.add(10);
                        actions.add("down");
                        actions.add("exit");
                    }else{
                        barbers[barberNo].wakeUp();
                        time+=30;
                    }
                    return;
                }
                if(actions.getFirst().equals("enter")){
                    findBarber();
                    if(atBarber) return;
                    //System.out.println(actions.getFirst());
                    actions.removeFirst();
                    for(int ctr=0; ctr<3; ctr++){
                        if(!queued[ctr]){
                            seatedAtQueue.add(this);
                            queued[ctr]=true;
                            beenQueued=true;
                            atQueue=ctr;
                            if(ctr==0){
                                motions.add(33);    
                                actions.add("left");
                                actions.add("sit");

                            }else if(ctr==1){
                                motions.add(24);
                                actions.add("right");
                                actions.add("sit");

                            }else if(ctr==2){
                                motions.add(39);
                                actions.add("right");
                                actions.add("sit");                             
                            }
                            //System.out.println("queue at "+ctr);
                            break;
                        }
                    }
                    //System.out.println(actions.getFirst());
                    if(!beenQueued){
                        actions.add("wander");
                    }
                    return;
                }
                if(actions.getFirst().equals("wander")){
                    actions.removeFirst();
                    beenQueued=true;
                    actions.add("left");
                    motions.add(10);
                    actions.add("right");
                    motions.add(20);
                    actions.add("left");
                    motions.add(10);
                    actions.add("up");
                    motions.add(15);
                    actions.add("exit");
                    return;
                }

                if(!motions.isEmpty()) motions.set(0, move);
                if(move==0&&!motions.isEmpty()){
                    actions.removeFirst();
                    motions.removeFirst();
                }
            }
        }

        public void findBarber(){
            //System.out.println("hello");
            if(!motions.isEmpty()) return;
            for(int ctr=0; ctr<3; ctr++){
                if(!seated[ctr]){
                    seatedAtQueue.remove(this);
                    seated[ctr]=true;
                    atBarber=true;
                    barberNo=ctr;
                    actions.clear();
                    //System.out.println("going to "+ctr);
                    if(beenQueued){
                        setLocation(getX(), getY()+1);
                        queued[atQueue]=false;
                        if(atQueue==0){
                            //System.out.println("yep");
                            motions.add(43);
                            actions.add("left");
                        }else if(atQueue==1){
                            motions.add(101);
                            actions.add("left");
                        }else if(atQueue==2){
                            motions.add(115);
                            actions.add("left");
                        }

                    }else{
                        motions.add(77);
                        actions.add("left");
                    }
                    if(ctr==0){
                        motions.add(15);
                        actions.add("down");
                        motions.add(19);
                        actions.add("left");
                    }else if(ctr==1){
                        motions.add(46);
                        actions.add("down");
                        motions.add(24);
                        actions.add("left");
                    }else if(ctr==2){
                        motions.add(76);
                        actions.add("down");
                        motions.add(30);
                        actions.add("left");
                    }

                    actions.add("cut");
                    //System.out.println(actions.getFirst());
                    break;
                }
            }
        }

        public int compareTo(Object other){
            if(((Customer)other).getY()>getY()){
                return 1;
            }else{
                return -1;
            }
        }

        public void paintComponent(Graphics g){
            super.paintComponent(g);
            if(actions.getFirst().equals("cut")) ((Graphics2D)g).drawImage(new ImageIcon("char0_5.gif").getImage(),0,0,this);
                else ((Graphics2D)g).drawImage(image, null,0,0);
        }
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        ((Graphics2D)g).drawImage(backdrop, null, 0, 0);
    }

    private class Barber extends JPanel{
        private ImageIcon barberImage;
        private Barber() throws IOException{
            super();
            setOpaque(false);
            sleep();
        }

        private void sleep(){
            barberImage=asleep;
        }

        private void wakeUp(){
            barberImage=awake;
        }

        public void paintComponent(Graphics g){
            super.paintComponent(g);
            ((Graphics2D)g).drawImage(barberImage.getImage(),0,0,this);
        }
    }
    public static void createAndShowGUI(){
        try{
            JFrame x=new JFrame("Sleeping Barber's Problem");
            x.setSize(799,730);
            x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            x.add(new SleepingBarbers());
            x.setResizable(false);
            x.setVisible(true);
        }catch(IOException e){}

    }
    public static void main(String args[]){
        SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                createAndShowGUI();
            }
        });
    }
}
                            ^

其中T是类型变量:

T extends Comparable<? super T> declared in method <T>sort(List<T>)

java:93:警告:[rawtypes]发现原始类型:可比较的私有类Customer extends JPanel实现可比较{^

泛型类可比性缺少类型参数,其中T是类型变量:

T extends Object declared in interface Comparable
private class Customer extends JPanel implements Comparable{
        ^
private class Barber extends JPanel{
        ^
                                                ^

6个警告

共有1个答案

万俟渊
2023-03-14

那是警告,不是错误。您正在使用没有类型说明符的集合。正如它所建议的,使用-xlint:unchecked重新编译以获得详细信息。

改变

private LinkedList actions=new LinkedList<String>(), motions=new LinkedList<Integer>();

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

  • 问题内容: 我正在完成学校的实验任务,并且在编译时出现此错误。该程序运行良好,有点想修复导致错误的原因。程序代码和完整的错误如下。一如既往的感谢! 错误:注意:F:\ Java \ Lab 8 \ Lab8.java使用未经检查或不安全的操作。注意:使用-Xlint:unchecked重新编译以获取详细信息。 码: 问题答案: 这意味着Java编译器已经注意到您的代码存在一些潜在的不安全问题,并警

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

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

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

  • 通过系统内置规则,将匹配规则的安全性较低的资源扫描出来并按照建议进行处理,从而提高系统安全性的目的。 建议列表 建议列表显示所有匹配优化建议规则的资源列表,用户可根据建议对资源进行处理。 忽略列表 忽略列表显示不需要处理的资源或一类规则建议。 规则配置 规则配置即根据系统内影响资源安全的条件设置相应的规则,如安全组的规则设置等,当资源匹配规则则表示资源的安全性较低,需要用户进行处理等。