java - "uses unchecked or unsafe operation"警告

标签 java applet javac

尝试编译时,编译器出现以下错误:

注意:SleepingBarbers.java 使用未经检查或不安全的操作。 注意:使用 -Xlint 重新编译:未选中详细信息。

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

使用 Xlint 编译时会发出以下警告:-
SleepingBarbers.java:69:警告:[未经检查]未经检查的方法调用:方法 Collections 类中的 d sort 应用于给定类型 Collections.sort(客户);

                            ^

必填:列表

发现:链接列表

其中 T 是类型变量:

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

SleepingBarbers.java:93:警告:[rawtypes] 找到原始类型:可比较 私有(private)类 Customer 扩展 JPanel 实现 Comparable{ ^

泛型类 Comparable 缺少类型参数 其中 T 是类型变量:

T extends Object declared in interface Comparable

SleepingBarbers.java:93: 警告: [serial] 可序列化类 SleepingBarbers.Cu stomer没有serialVersionUID的定义

private class Customer extends JPanel implements Comparable{
        ^

SleepingBarbers.java:314: 警告: [serial] 可序列化类 SleepingBarbers.B arber没有serialVersionUID的定义

private class Barber extends JPanel{
        ^

SleepingBarbers.java:9: 警告: [serial] 可序列化类 SleepingBarbers 具有 没有定义serialVersionUID

公共(public)类 SleepingBarbers 扩展 JPanel 实现 ActionListener{ ^

SleepingBarbers.java:113: 警告: [cast] 冗余强制转换为 Integer if(!motions.isEmpty()) move=(Integer)motions.getFirst();

                                                ^

6 个警告

最佳答案

这是警告,而不是错误。您使用的集合不带类型说明符。如建议的那样,请使用-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>();

在 Java 7 中,您不必这样做。阅读 here了解详情。

关于java - "uses unchecked or unsafe operation"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924367/

相关文章:

java - Android Webview 输入文件选择器代码错误

java - 如何在 Java 中将 HTTP 请求主体转换为 JSON 对象

java - 为什么这个小程序有一个 destroy 方法?

java - 如何对包含另一个 jar 文件的 jar 进行签名

java - 同时使用TableCellEditor和TableCellRenderer?

java - byte[] byteArray = anotherByteArray 的作用是什么?

java - 我可以让我的Applet更优雅地结束吗?

javac 版本和 java 版本在命令行上显示不同

JAVAC 错误 - 无法将类识别为静态(后续)

Java编译错误加载类路径