frillybob frillybob - 1 year ago 60
Java Question

Swing unwritten field warning (Java)

I have findBugs installed and get a bug warning in the actionPerformed method at if statement

if (source == this.temp)

The warning says there is an unwritten field. The program still compiles but hangs when I click on the button called temp.

I thought I had already correctly initialized that field. Can someone direct me on where I messed up please? Thanks

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

//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");
//Pack up

private JComponent makeTextPanel(String text) {
JPanel panel = new JPanel();
JLabel filler = new JLabel(text);
panel.setLayout(new GridLayout(1, 1));
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);
JScrollPane noticeTextScroll = new JScrollPane(noticeText);
return panel;


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

public void actionPerformed(ActionEvent event) {
//Wait cursor

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

Answer Source

In the constructor you have this bit of code:

JButton temp = new JButton("Hey");

It defines a local temp variable which shadows the member - remove JButton so that it uses the class member:

temp = new JButton("Hey");