2016-08-15 66 views
0

我已经安装的FindBugs和if语句摇摆不成文场警告(JAVA)

if (source == this.temp) 

警告说,有一个不成文的领域得到actionPerformed方法的错误警告。该程序仍然编译,但当我点击名为temp的按钮时会挂起。

我以为我已经正确地初始化该字段。有人能指引我搞砸了吗?由于

import java.awt.Cursor; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTabbedPane; 
import javax.swing.JTextArea; 
import javax.swing.border.EmptyBorder; 

import components.simplereader.SimpleReader; 
import components.simplereader.SimpleReader1L; 

/** 
* View class. 
* 
* @author Redacted 
*/ 
@SuppressWarnings("serial") 
public final class PasswordManagerView1 extends JFrame 
    implements PasswordManagerView { 

private JButton temp; 

/** 
* controller. 
*/ 
private PasswordManagerController controller; 

/** 
* Jpanel. 
*/ 

/** 
* Useful constants. 
*/ 
private Dimension maxSize; 
private JTabbedPane tabbedPane; 

/** 
* Constructor. 
*/ 
public PasswordManagerView1() { 
    super("Password Manager"); 
    JTabbedPane tabbedPane = new JTabbedPane(); 
    //Initial JPanel creation 
    tabbedPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    //tabbedPane.setLayout(new BorderLayout(0, 0)); 
    this.maxSize = new Dimension(700, 300); 
    tabbedPane.setPreferredSize(this.maxSize); 
    this.getContentPane().add(tabbedPane); 

    //Initial JTabbedPane creation 

    //Tab creation 
    JComponent panel1 = this.makeTextPanel("temp1"); 
    ImageIcon icon = new ImageIcon("lock-icon.png"); 
    tabbedPane.addTab("Add Password", icon, panel1, 
      "Adds a password to the vault"); 
    JComponent panel2 = this.makeTextPanel("temp2"); 
    tabbedPane.addTab("Delete Password", icon, panel2, 
      "Deletes a password from the vault"); 
    JComponent panel3 = this.makeTextPanel("temp3"); 
    tabbedPane.addTab("Password Vault", icon, panel3, 
      "View the passwords in the vault"); 
    JComponent panel4 = this.makeInfoPanel(); 
    tabbedPane.addTab("Info/Settings", icon, panel4, 
      "View settings and program info"); 
    JButton temp = new JButton("Hey"); 
    panel1.add(temp); 
    temp.addActionListener(this); 
    //Pack up 
    this.pack(); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setVisible(true); 
} 

private JComponent makeTextPanel(String text) { 
    JPanel panel = new JPanel(); 
    JLabel filler = new JLabel(text); 
    filler.setHorizontalAlignment(JLabel.CENTER); 
    panel.setLayout(new GridLayout(1, 1)); 
    panel.add(filler); 
    return panel; 
} 

private JComponent makeInfoPanel() { 
    JPanel panel = new JPanel(); 
    panel.setLayout(new GridLayout(1, 1)); 
    StringBuilder toPrint = new StringBuilder(); 
    SimpleReader in = new SimpleReader1L("data/Notice.txt"); 
    while (!in.atEOS()) { 
     toPrint.append(in.nextLine() + "\n"); 
    } 
    String toPrintString = toPrint.toString(); 
    JTextArea noticeText = new JTextArea(toPrintString); 
    noticeText.setEditable(false); 
    JScrollPane noticeTextScroll = new JScrollPane(noticeText); 
    panel.add(noticeTextScroll); 
    in.close(); 
    return panel; 

} 

@Override 
public void registerObserver(PasswordManagerController controller) { 
    this.controller = controller; 
} 

@Override 
public void actionPerformed(ActionEvent event) { 
    //Wait cursor 
    this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 

    //What button was pressed 
    Object source = event.getSource(); 
    if (source == this.temp) { 
     this.controller.processTestEvent(); 
    } 
} 

回答

1

在你有这段代码构造:

JButton temp = new JButton("Hey"); 
panel1.add(temp); 

它定义了一个局部temp变量,阴影成员 - 删除JButton,以便它使用类成员:

temp = new JButton("Hey"); 
panel1.add(temp); 
+0

啊这么简单的错误啊。谢谢。在你看来,我能问一下这段代码是否看起来很体面? – frillybob

+2

@frillybob:这是更多的代码审查问题:http://codereview.stackexchange.com/ - 但国际海事组织的号码是一个很大的禁忌,评论不会增加太多的代码(尽管它是好的,如果你正在学习),并且所有这些代码组(例如标签创建)都可以使用它们自己的功能。 – mszymborski

+2

@mszymborski仅供参考[codereview.se]在几分钟内关闭的任何问题提及了一个错误或某种不正常工作的问题。但是,一旦它有效,它应该发布在CR上,以获取关于代码的任何/所有方面的反馈。 –