First of all, sorry for bad English. So i have this code, for printing an infix to Postfix converter. I build this using Netbeans, and got all the GUI generated.
Everytime I inputted the infix, and pressed convert, it works perfectly. And then, I used the reset button. When I clicked it, and tried to put the infix and convert it once again, it show Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException.
Here's what I came up to (Sorry for bad coding aesthetic and Indonesian language) :
package stack;
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.util.*;
import java.lang.Character;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class JFrame extends javax.swing.JFrame {
boolean textState = false;
static char[] inputArray;
public static Scanner input;
public static String arrayPrint;
static ArrayList<Character> output = new ArrayList();;
public static int tinggiPostfix;
public static int counter;
public static int sisaArray = 0;
public static int pembatas = 1;
public static int counterOutput = 0;
// *** Flipping Array *** //
public static void flipInPlace(Object[][] theArray) {
for(int i = 0; i < (theArray.length / 2); i++) {
Object[] temp = theArray[i];
theArray[i] = theArray[theArray.length - i - 1];
theArray[theArray.length - i - 1] = temp;
}
}
// *** Proses pengubahan infix ke postfix
public static char[] prosesPerbaris(char[] notasi, int jumlahBaca){
char[] hasilPerbaris = new char[jumlahBaca];
Stack inputStack;
inputStack = new Stack();
inputStack.clear();
inputStack.removeAllElements();
if(!inputStack.isEmpty()) {inputStack.removeAllElements();}
else{inputStack.removeAllElements();}
for(int i = 0; i < jumlahBaca; i++)
{
if(inputStack.isEmpty() && !Character.isLetterOrDigit(notasi[i]))
{
inputStack.push(notasi[i]);
}
else if(notasi[i] =='(' && !Character.isLetterOrDigit(notasi[i]))
{
inputStack.push(notasi[i]);
}
else if(Character.isLetterOrDigit(notasi[i]))
{
prosesOutput(notasi[i], jumlahBaca);
}
else if(notasi[i] == ')')
{
while(inputStack.isEmpty() == false && Character.valueOf((Character) inputStack.peek()) !='(')
{
if(inputStack.isEmpty() == false){
prosesOutput(Character.valueOf((Character) inputStack.pop()), jumlahBaca);
}
else{
continue;
}
}
if(inputStack.isEmpty() == false){
inputStack.pop();
}
else{
continue;
}
}
else if(pickOperator(notasi[i]))
{
char teratas = Character.valueOf((Character) inputStack.peek());
if(teratas == '(' && !Character.isLetterOrDigit(notasi[i]))
{
inputStack.push(notasi[i]);
}
else
{
if(Character.isLetterOrDigit(teratas))
{
prosesOutput(notasi[i], jumlahBaca);
}
else if(teratas == ' '){
inputStack.pop();
inputStack.push(notasi[i]);
}
else if(cekOP(teratas) < cekOP(notasi[i]))
{
inputStack.push(notasi[i]);
}
else if(cekOP(teratas) > cekOP(notasi[i]) || cekOP(teratas) == cekOP(notasi[i]))
{
while(!inputStack.isEmpty() && pickOperator(teratas)){
prosesOutput(Character.valueOf((Character) inputStack.pop()), jumlahBaca);
}
inputStack.push(notasi[i]);
}
}
}
else
{
while(!inputStack.isEmpty())
{
prosesOutput(Character.valueOf((Character) inputStack.pop()), jumlahBaca);
}
break;
}
}
for(int i = 0; i< inputStack.size(); i++){
if(!inputStack.isEmpty()){
hasilPerbaris[i] = Character.valueOf((Character) inputStack.toArray()[i]);
}
else{
break;
}
}
return hasilPerbaris;
}
// *** Proses ngeprint hasil Akhir *** //
public static void prosesOutput(char hasil, int iterasi)
{
if(hasil!='(' && iterasi >= inputArray.length && output.size() < inputArray.length)
{
output.add(hasil);
}
else{
}
}
// *** Ngecek operator atau bukan. Kalau iya, return true. Untuk validasi *** //
public static boolean pickOperator(char op){
if(op == '+' || op == '-' || op == '/' || op == '^' || op == '*') {
return true;
}
return false;
}
// *** Nentuin operator mana yang pangkatnya lebih besar dari operator lain *** //
static int cekOP(char op){
switch(op){
case '+':
case '-':
return 0;
case '*':
case '/':
return 1;
case '^':
return 2;
default:
throw new IllegalArgumentException("Operator "+ op +" tidak ada");
}
}
public JFrame() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jTextField1 = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jButton2 = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenuItem2 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Infix to Postfix Converter");
setMaximumSize(new java.awt.Dimension(700, 400));
setMinimumSize(new java.awt.Dimension(700, 400));
setResizable(false);
jTextField1.setText("Masukkan notasi infix disini, kemudian diakhiri dengan tanda \";\" (Tanpa kutip)");
jTextField1.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
jTextField1.setDoubleBuffered(true);
jTextField1.setRequestFocusEnabled(false);
jTextField1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jTextField1MousePressed(evt);
}
});
jLabel1.setText("Masukkan notasi Infix:");
jButton1.setText("Convert");
jButton1.setRequestFocusEnabled(false);
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jButton1MousePressed(evt);
}
});
jTextArea1.setEditable(false);
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jTextArea1.setEnabled(false);
jScrollPane2.setViewportView(jTextArea1);
jButton2.setText("Reset");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2)
.addComponent(jLabel1)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 428, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1)
.addComponent(jButton2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)
.addContainerGap())
);
jMenu1.setText("File");
jMenuItem1.setText("About");
jMenuItem1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItem1MousePressed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuItem2.setText("Exit");
jMenuItem2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItem2MousePressed(evt);
}
});
jMenu1.add(jMenuItem2);
jMenuBar1.add(jMenu1);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void jMenuItem1MousePressed(java.awt.event.MouseEvent evt) {
JOptionPane.showMessageDialog(null, "\t\tAbout Us\n"
+ "Afriandri Prima Utama\n"
+ "Andika Demas Riyandi\n"
+ "Chriscel Novian\n"
+ "Denny Aditya P\n"
+ "Rizka Yulia Sukma\n"
+ "Rendytio Arifian P\n"
+ "Thomi Alghani\n\n"
+ "Ini adalah program simple untuk mengubah notasi Infix "
+ "menjadi notasi Postfix.\n\n"
+ "Copyright 2IA01 (C) 2016");
}
private void jMenuItem2MousePressed(java.awt.event.MouseEvent evt) {
System.exit(1);
}
private void jButton1MousePressed(java.awt.event.MouseEvent evt) {
// The battle begins. Penginputan soal, pengecekan tanda kurung, dan titik koma. //
int i, j = 0;
if (jTextField1.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "Masukkanlah notasi infix dengan benar!");
}
else if (!jTextField1.getText().isEmpty() && !jTextField1.getText().endsWith(";")) {
JOptionPane.showMessageDialog(null, "Akhiri notasi infix dengan tanda titik koma!");
} else {
jTextArea1.enable();
jTextArea1.setText("");
jTextArea1.append("Masukkan Notasi Postfix yang diinginkan (akhiri notasi dengan tanda \" ; \" : ");
jTextArea1.append(jTextField1.getText());
jTextArea1.append("\n");
inputArray = jTextField1.getText().toCharArray();
for(i = 0; i < inputArray.length; i++)
{
if(inputArray[i] == '(' || inputArray[i] == ')' || inputArray[i] == ';')
{
counterOutput++;
}
else{
continue;
}
}
// Proses pembuatan matriks Postfix, menambahkan isi JTextArea1 //
char[][] tempFinal = new char[inputArray.length][inputArray.length];
for(i = 0; i < inputArray.length;i++){
for(j = 0; j < pembatas; j++){
tempFinal[j][i] = prosesPerbaris(inputArray,pembatas)[j];
}
pembatas++;
}
jTextArea1.append("Notasi yang diamati adalah = \n");
for(i = 0; i < inputArray.length-1;i++){
jTextArea1.append(inputArray[i] + " ");
}
jTextArea1.append("\n");
// Real Process ada disini. Masukkin elemen kedalam Stack //
char [][] hasilFinal = new char [tempFinal.length][tempFinal.length];
ArrayList<Character>[][] tempFinal2 = new ArrayList[tempFinal.length][tempFinal.length];
for(i = 0; i < tempFinal2.length;i++)
{
for(j = 0; j < tempFinal2.length; j++)
{
tempFinal2[i][j] = new ArrayList<>();
}
}
for(i = 0; i < tempFinal2.length;i++)
{
for(j = 0; j < tempFinal2.length; j++)
{
if(tempFinal[i][j] == '\u0000')
{
tempFinal2[i][j].add(' ');
}
else
{
tempFinal2[i][j].add(tempFinal[i][j]);
}
}
}
// Saatnya Stack dibalik! //
flipInPlace(tempFinal2);
// Tidak afdhol kalau tidak di print kembali matriksnya //
for( i = 0; i < tempFinal2.length; i++) {
for( j = 0; j < tempFinal2.length; j++) {
jTextArea1.append(tempFinal2[i][j].toString().replaceAll("[\\[\\]]", "") + " ");
}
jTextArea1.append("\n\n");
}
// Tentu saja, jangan lupakan Output terakhirnya juga //
jTextArea1.append("Outputnya adalah = \n");
for(i=0; i < inputArray.length-counterOutput;i++){
jTextArea1.append(output.get(i).toString().replaceAll("[\\,]", "") + ' ');
}
jTextField1.disable();}
}
private void jTextField1MousePressed(java.awt.event.MouseEvent evt) {
if (textState == false) {
textState = true;
jTextField1.setText("");
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
jTextArea1.setText(null);
jTextArea1.disable();
jTextField1.setText(null);
jTextField1.enable();
jTextField1.setEditable(true);
jTextField1.requestDefaultFocus();
inputArray = null;
output = null;
textState = false;
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}
For your info, my components are:
jTextArea1
jTextField1
jButton1 for Convert
jButton2 for Reset
Looking forward for answers. Thanks!