PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Java swing erro não executa #459008

21/10/2013

0

Bom dia !
Pessoal

Estou aprendendo java, e copiei um tutorial de uma calculadora, mas esta dando erro, se alguém puder me ajudar ficarei muito agradecido.
O Resultado deveria aparecer a Calculadora, só aparece a msg abaixo:

Exception in thread "main" java.lang.NullPointerException
at br.com.estudo.calculadora.Calculadora.<init>(Calculadora.java:135)
at br.com.estudo.calculadora.Calculadora.main(Calculadora.java:516)

Aqui vai o Código
package br.com.estudo.calculadora;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;


public class Calculadora extends JFrame implements ActionListener {
//Variáveis

final int MAX_INPUT_LENGTH = 20;
final int INPUT_MODE = 0;
final int RESULT_MODE = 1;
final int ERROR_MODE = 2;

int displayMode;
boolean clearOnNextDigit, percent;
double lastNumber;

String lastOperator;

private JMenu jmenuFile, jmenuHelp;
private JMenuItem jmenuitemExit, jmenuitemAbout;

private JLabel jlbOutput;
private JButton jbnButtons[];
private JPanel jplMaster, jplBackSpace, jplControl;
/*
* Font (String name, int style, int size
* Creates a new Font from specified name, style and point size.
*
*/

Font f12 = new Font("Times New Roman",0,12);
Font f121 = new Font("Times New Roman",1,12);

//Constructor
public Calculadora () {
/*
* Setup JMenuBar
* Have provided all Jmenu`s with Mnemonics
* Have provided som JMenuItem components with Keybord accelerators
*/

jmenuFile = new JMenu("File");
jmenuFile.setFont(f121);
jmenuFile.setMnemonic(KeyEvent.VK_F);

jmenuitemExit = new JMenuItem("Exit");
jmenuitemExit.setFont(f12);
jmenuitemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
ActionEvent.CTRL_MASK));
jmenuFile.add(jmenuitemExit);
jmenuHelp = new JMenu("Help");
jmenuHelp.setFont(f121);
jmenuHelp.setMnemonic(KeyEvent.VK_H);

jmenuitemAbout = new JMenuItem("About Calculadora ");
jmenuitemAbout.setFont(f12);
jmenuHelp.add(jmenuitemAbout);

JMenuBar mb = new JMenuBar();
mb.add(jmenuFile);
mb.add(jmenuHelp);
setJMenuBar(mb);

//set frame layout manager

setBackground(Color.gray);
jplMaster = new JPanel();
jlbOutput = new JLabel("O");
jlbOutput.setHorizontalTextPosition(JLabel.RIGHT);
jlbOutput.setBackground(Color.white);
jlbOutput.setOpaque(true);

//Add components to frame

getContentPane().add(jlbOutput, BorderLayout.NORTH);
jbnButtons = new JButton[23];
// gridlayout(int rows cols,int hgap, int vgap)
JPanel jplButtons = new JPanel(); // Container for JButtons
//Create numeric Buttons

for ( int i = 0; i < 9 ; i++) {
//set each jbutton label to the value of index

jbnButtons[i] = new JButton(String.valueOf(i));
}
//Create operators buttons
jbnButtons[10] = new JButton("+/-");
jbnButtons[11] = new JButton(".");
jbnButtons[12] = new JButton("=");
jbnButtons[13] = new JButton("/");
jbnButtons[14] = new JButton("*");
jbnButtons[15] = new JButton("-");
jbnButtons[16] = new JButton("+");
jbnButtons[17] = new JButton("sqrt");
jbnButtons[18] = new JButton("1/x");
jbnButtons[19] = new JButton("%");

jplBackSpace = new JPanel();
jplBackSpace.setLayout(new GridLayout(1,1,2,2));
jbnButtons[20] = new JButton("Backspace");
jplBackSpace.add(jbnButtons[20]);
jplControl = new JPanel();
jplControl.setLayout(new GridLayout(1,2,2,2));
jbnButtons[21] = new JButton("CE");
jbnButtons[22] = new JButton("C");
jplControl.add(jbnButtons[21]);
jplControl.add(jbnButtons[22]);


/// setting all Numered JButton''s Blue. The rest to red
for(int i = 0; i < jbnButtons.length; i++) {
jbnButtons[i].setFont(f12);

if(i < 10)
jbnButtons[i].setForeground(Color.blue);
else
jbnButtons[i].setForeground(Color.red);

}
//set panel layout manager for a 4 by 5 grid

jplButtons.setLayout(new GridLayout(4,5,2,2));

//add buttons to keypad panel starting at top left
//first row
for(int i = 7; i <= 9; i++) {

jplButtons.add(jbnButtons[i]);

}
//add button/sqrt
jplButtons.add(jbnButtons[13]);
jplButtons.add(jbnButtons[17]);
//second row

for (int i = 4; i <6; i++) {
jplButtons.add(jbnButtons[i]);

}
//add button * and x^2
jplButtons.add(jbnButtons[14]);
jplButtons.add(jbnButtons[18]);

//third row
for (int i = 1; i <= 3; i++) {
jplButtons.add(jbnButtons[i]);

}

//add button - and %
jplButtons.add(jbnButtons[15]);
jplButtons.add(jbnButtons[19]);

//Four row

//add 0,+/-,.,+ , and =
jplButtons.add(jbnButtons[0]);
jplButtons.add(jbnButtons[10]);
jplButtons.add(jbnButtons[11]);
jplButtons.add(jbnButtons[16]);
jplButtons.add(jbnButtons[12]);

jplMaster.setLayout(new BorderLayout());
jplMaster.add(jplBackSpace, BorderLayout.WEST);
jplMaster.add(jplControl, BorderLayout.EAST);
jplMaster.add(jplButtons,BorderLayout.SOUTH);

//add components fo Frame

getContentPane().add(jplMaster,BorderLayout.SOUTH);
requestFocus();
// active actionListener
for(int i = 0; i < jbnButtons.length; i++) {
jbnButtons[i].addActionListener(this);

}
jmenuitemAbout.addActionListener(this);
jmenuitemExit.addActionListener(this);

clearAll();

//Add WindowListener for closing frrame and ending program

addWindowListener(new WindowAdapter() {

@SuppressWarnings("unused")
public void WindowClosed(WindowEvent e) {
System.exit(0);
}
});
} // end off constructor calculator

//performed action
public void actionPerfomed (ActionEvent e) {

double result = 0;

if (e.getSource() == jmenuitemAbout) {

JDialog dlgAbout = new CustomABOUTDialog(this,
"About Java swing Calculator", true);

dlgAbout.setVisible(true);

}else if(e.getSource() == jmenuitemExit) {
System.exit(0);
}

//Search for the Button pressed until end of array or key found
for (int i=0; i<jbnButtons.length; i++)
{
if(e.getSource() == jbnButtons[i])
{
switch(i)
{
case 0:
addDigitToDisplay(i);
break;

case 1:
addDigitToDisplay(i);
break;

case 2:
addDigitToDisplay(i);
break;

case 3:
addDigitToDisplay(i);
break;

case 4:
addDigitToDisplay(i);
break;

case 5:
addDigitToDisplay(i);
break;

case 6:
addDigitToDisplay(i);
break;

case 7:
addDigitToDisplay(i);
break;

case 8:
addDigitToDisplay(i);
break;

case 9:
addDigitToDisplay(i);
break;

case 10: // +/-
processSignChange();
break;

case 11: // decimal point
addDecimalPoint();
break;

case 12: // =
processEquals();
break;

case 13: // divide
processOperator("/");
break;

case 14: // *
processOperator("*");
break;

case 15: // -
processOperator("-");
break;

case 16: // +
processOperator("+");
break;

case 17: // sqrt
if (displayMode != ERROR_MODE)
{
try
{
if (getDisplayString().indexOf("-") == 0)
displayError("Invalid input for function!");

result = Math.sqrt(getNumberInDisplay());
displayResult(result);
}

catch(Exception ex)
{
displayError("Invalid input for function!");
displayMode = ERROR_MODE;
}
}
break;

case 18: // 1/x
if (displayMode != ERROR_MODE){
try
{
if (getNumberInDisplay() == 0)
displayError("Cannot divide by zero!");

result = 1 / getNumberInDisplay();
displayResult(result);
}

catch(Exception ex) {
displayError("Cannot divide by zero!");
displayMode = ERROR_MODE;
}
}
break;

case 19: // %
if (displayMode != ERROR_MODE){
try {
result = getNumberInDisplay() / 100;
displayResult(result);
}

catch(Exception ex) {
displayError("Invalid input for function!");
displayMode = ERROR_MODE;
}
}
break;

case 20: // backspace
if (displayMode != ERROR_MODE){
setDisplayString(getDisplayString().substring(0,
getDisplayString().length() - 1));

if (getDisplayString().length() < 1)
setDisplayString("0");
}
break;

case 21: // CE
clearExisting();
break;

case 22: // C
clearAll();
break;
}
}
}
}


void setDisplayString (String s) {
jlbOutput.setText(s);
}

String getDisplayString() {
return jlbOutput.getText();
}

void addDigitToDisplay(int digit) {
if (clearOnNextDigit)
setDisplayString("");

String inputString = getDisplayString();

if (inputString.indexOf("0") == 0 ) {
inputString = inputString.substring(1);
}
if ((!inputString.equals("0") || digit > 0 )
&& inputString.length() < MAX_INPUT_LENGTH) {
setDisplayString(inputString + digit);
}
}

void addDecimalPoint(){
displayMode = INPUT_MODE;

if (clearOnNextDigit)
setDisplayString("");

String inputString = getDisplayString();

// If the input string already contains a decimal point, don''t
// do anything to it.
if (inputString.indexOf(".") < 0)
setDisplayString(new String(inputString + "."));
}

void processSignChange() {
if (displayMode == INPUT_MODE) {
String input = getDisplayString() ;
if (input.length() > 0 && !input.equals("0 ")) {
if (input.indexOf("-")==0)
setDisplayString(input.substring(1));
else
setDisplayString("-" + input);
}
} else if (displayMode == RESULT_MODE) {
double numberInDisplay = getNumberInDisplay();
if(numberInDisplay != 0)
displayResult(-numberInDisplay);
}
}
void clearAll() {
setDisplayString("0");
lastOperator= "0";
lastNumber = 0;
displayMode = INPUT_MODE;
clearOnNextDigit = true;
}
void clearExisting() {
setDisplayString("0");
clearOnNextDigit = true;
displayMode = INPUT_MODE;

}
double getNumberInDisplay() {
String input = jlbOutput.getText();
return Double.parseDouble(input);

}

void processOperator(String op) {
if(displayMode != ERROR_MODE) {
double numberInDisplay = getNumberInDisplay();
if(!lastOperator.equals("0")) {
try {
double result = processLastOperator();
displayResult(result);
lastNumber = result;
}catch(DivideByZeroException e ) {

}
}else {
lastNumber = numberInDisplay;
}
clearOnNextDigit = true;
lastOperator = op;
}
}
void processEquals() {
double result = 0;
if (displayMode != ERROR_MODE) {
try {
result = processLastOperator();
displayResult(result);


} catch (DivideByZeroException e) {
displayError("cannot divide by zero !!");

}
lastOperator = "0";
}
}
double processLastOperator() throws DivideByZeroException {
double result = 0;
double numberInDisplay = getNumberInDisplay();
if(lastOperator.equals("/")){
if(numberInDisplay == 0)
throw (new DivideByZeroException());
result = lastNumber / numberInDisplay;
}
if (lastOperator.equals("*"))
result = lastNumber * numberInDisplay;
if (lastOperator.equals("-"))
result = lastNumber - numberInDisplay;
if (lastOperator.equals("+"))
result = lastNumber + numberInDisplay;
return result;
}
void displayResult(double result) {
setDisplayString(Double.toString(result));
lastNumber = result;
displayMode = RESULT_MODE;
clearOnNextDigit = true;
}
void displayError(String errorMessage) {
setDisplayString(errorMessage);
lastNumber = 0;
displayMode = ERROR_MODE;
clearOnNextDigit = true;
}

public static void main(String [] args) {
Calculadora calci = new Calculadora();


Container contentPane = calci.getContentPane();
// contentPane.setLayout(new BorderLayout());
calci.setTitle("Java Swing Calculadora");
calci.setSize(241,217);
calci.pack();
calci.setLocation(400,250);
calci.setVisible(true);
calci.setResizable(false);
}

public class DivideByZeroException extends Exception {


public DivideByZeroException() {
super();
}
public DivideByZeroException(String s ) {

super(s);
}
}

public class CustomABOUTDialog extends JDialog {

JButton jbnOk;
CustomABOUTDialog(JFrame parent, String title, boolean modal) {
super(parent, title, modal);
setBackground(Color.black);
JPanel p1 = new JPanel(new FlowLayout(FlowLayout.CENTER));
StringBuffer text = new StringBuffer();
text.append("calculator information n\n");
text.append("Developer: Hemmanth\n");
text.append("Version: 1.0");
JTextArea jtAreaAbout = new JTextArea(5,21);
jtAreaAbout.setText(text.toString());
jtAreaAbout.setFont(new Font("Times new Roman", 1,13));
jtAreaAbout.setEditable(false);
p1.add(jtAreaAbout);
p1.setBackground(Color.red);
getContentPane().add(p1,BorderLayout.CENTER);
JPanel p2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
jbnOk = new JButton("Ok");
jbnOk.addActionListener((ActionListener) this);
p2.add(jbnOk);
getContentPane().add(p2,BorderLayout.SOUTH);
setLocation(408,270);
setResizable(false);
addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {
Window aboutDialog = e.getWindow();
aboutDialog.dispose();

}
});
pack();
}

public void actionPerformed(ActionEvent e ) {
if(e.getSource() == jbnOk) {
this.dispose();
}
}

}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}



}//end of de class Swing Calculadora

Almir Alves

Almir Alves

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar