`
butnet
  • 浏览: 87237 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

今天试了下FindBugs分析了一个项目,结果如下.

 
阅读更多
我分析的是前不久写的网络同步绘画服务器端,
分析得出了三个BUG.
BUG 1: Main.java中,BUG原因是外部的程序可以修改对象中的数据,所以不安全,以后注意.
public static Hashtable<String,User> getUsers(){
        return users;
    }
Public static method may expose internal representation by returning array

A public static method returns a reference to an array that is part of the static state of the class. Any code that calls this method can freely modify the underlying array. One fix is to return a copy of the array.

其实这个方法,在后的程序中有两个地方用了:
out.writeUTF(KEYS.USERS+Main.getUsers().size());
Enumeration<User> ele=Main.getUsers().elements();
修改方法:
将Main.java中的原来方法删除,并添加两个新的方法,OK了!
public static int getUserSize(){
        return users.size();
    }
public static Enumeration<User> getUsers(){
        return users.elements();
}

BUG 2:Clinet.java中,这一个是因为,如果DBS.checkUser(name,pass)抛出异常,那么,user就为null,则抛出NullPointerException
User user=null;
        try {
            user=DBS.checkUser(name, pass);
            if(user==null){
                out.writeUTF(KEYS.ERROR+"密码错误");
                close();
                return;
            }
        } catch (SQLException e) {
            e.printStackTrace();
           
        }
        user.setPort(nport);//这一句有BUG.
Possible null pointer dereference in method on exception path

A reference value which is null on some exception control path is dereferenced here.  This may lead to a NullPointerException when the code is executed.  Note that because FindBugs currently does not prune infeasible exception paths, this may be a false warning.

Also note that FindBugs considers the default case of a switch statement to be an exception path, since the default case is often infeasible.

修改办法在e.printStackTrace()之后,加上return;

BUG 3:MyIcon.java没读懂意思,大概是这样退出不好.

item.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                System.exit(0);//这一句有BUG
            }
        });

Method invokes System.exit(...)

Invoking System.exit shuts down the entire Java virtual machine. This should only been done when it is appropriate. Such calls make it hard or impossible for your code to be invoked by other code. Consider throwing a RuntimeException instead.

还不知道具体原因,所以没法修正.
英语差就是不好.

分享到:
评论

相关推荐

    FindBugs完全使用手册

    FindBugs是一款专门用于Java字节码静态分析的工具,其主要功能在于帮助开发人员提高代码质量并发现潜在的缺陷。该工具通过对类文件或JAR文件进行分析,并将其与一系列预设的缺陷模式进行比对,从而识别出可能存在的...

    findbugs安装说明和简单使用说明

    FindBugs是一款强大的静态代码分析工具,能够帮助开发者发现Java程序中的潜在错误和编程缺陷。它通过分析程序的字节码来查找可能导致错误的行为模式,从而提高代码质量和可维护性。 #### 二、FindBugs安装指南 ###...

    Myeclipse10安装checkStyle与findBugs插件-费元星详细完美解决

    findBugs是一款静态代码分析工具,专注于查找潜在的错误和缺陷。它能检测出可能的空指针异常、资源未关闭、并发问题等,帮助开发者预防运行时错误。findBugs的强大之处在于它能够分析代码逻辑,找出那些难以被单元...

    reflections-maven-2.0.Beta2.zip

    总的来说,`findbugs-jmock`作为一个开源项目,不仅丰富了FindBugs的功能,也提升了jMock测试的质量。对于追求代码质量的开发者来说,它无疑是一个值得信赖的伙伴。在实际项目中合理利用这款工具,可以显著提高软件...

    sonarqube jenkins svn maven代码质量检查.pdf

    Maven是一个项目管理和自动化构建工具,基于项目对象模型(POM)的概念。Maven不仅可以构建Java项目,还可以构建C#、Ruby、Scala等多种语言的项目。Maven主要功能包括项目构建、依赖管理和项目信息管理等。 ### ...

    敏捷开发中编写高质量Java代码

    - 运行FindBugs分析,获取结果并进行修正。 #### 三、单元测试 单元测试是保证代码质量的重要手段之一,能够验证代码的基本功能是否按预期工作。JUnit是最常用的Java单元测试框架之一。 1. **编写单元测试**: ...

    Sonar-sonarlint使用说明.pdf

    SonarQube是一个开源平台,主要用于代码质量管理,支持多种编程语言的源代码质量管理和分析。它通过插件机制集成了不同的测试工具、代码分析工具以及持续集成工具,如pmd-cpd、checkstyle、findbugs、Jenkins等。...

    Hudson持续集成环境搭建

    本文档将详细介绍如何搭建一个完整的Hudson持续集成环境,并集成了包括SVN、Maven、Checkstyle、PMD、FindBugs等在内的多种工具。 #### 二、安装前的准备与Hudson安装 **1. 安装前的准备** - **JDK安装:** 在...

    sonar安装及使用说明

    1. **创建数据库**:首先需要创建一个名为`sonar`的数据库,并设置字符集为UTF-8,确保数据的一致性和正确性。 ```sql CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; ``` 2. **创建用户并...

    360手机卫士性能优化之路

    为了应对这些问题,360手机卫士采取了一系列性能优化措施和工具,具体知识点如下: 1. 功能模块的管理:面对产品经理的不断需求,项目中需要的功能模块众多,这导致优化工作量大增。优化方法之一是进行功能模块的...

    jacoco-demo:java demo代码,主要提供 ①jacoco进行对java代码扫描覆盖率统计②sonar进行对java代码漏洞扫描

    【标题】"jacoco-demo" 是一个以Java编写的演示项目,主要展示了如何使用JaCoCo工具进行代码覆盖率统计,并结合SonarQube进行代码漏洞扫描。这个项目旨在帮助开发者理解如何在实际开发中实施代码质量和安全性检查。 ...

Global site tag (gtag.js) - Google Analytics