简体   繁体   中英

Why nothing happens after JButton is pressed

I have the following code - all Netbeans generated except for the method defining the action that should be taken when the button is pressed. When I press the button, first of all it doesn't come back up, and nothing appears in the standard output window in the Netbeans IDE. What is going wrong?

import javax.swing.JFrame;

public class CodeCenter extends JFrame {

    /**   
    * Creates new  form CodeCenter
    */
    public CodeCenter() {
        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() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jButton1.setText("Run");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 711, Short.MAX_VALUE)
            .addContainerGap())
        .addGroup(layout.createSequentialGroup()
            .addGap(288, 288, 288)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
        layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addGap(17, 17, 17)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 548, Short.MAX_VALUE)
            .addContainerGap())
    );

         pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        //writes each line of user code to seperate array place
        //userCodeArray can then be passed into an enhanced for loop to act on each line individually
        // May need to be moved into different class
        String[] userCodeArray = getTextasArray();

        System.out.println("Printing");

        if(userCodeArray[0].equals("TEST")) {
            System.out.println("Text read");
        } else {
            System.out.print("Text not read");
        }

    }                                        

    //Sets up Intrigued machine and the codecenter
    public static void main(String args[]) {

        //Not relevant to question
        IntriguedMachine machine = new IntriguedMachine();

        /* 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(CodeCenter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(CodeCenter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(CodeCenter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(CodeCenter.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 CodeCenter().setVisible(true);
            }
        });
    }

    //Takes the user code, splits it into a single String for each line, puts each String into userCodeArray, and returns userCodeArray
    //Not automatically-generated
        public String[] getTextasArray() {
            int lineCount = jTextArea1.getLineCount();
            String[] userCodeArray = new String[lineCount];
            for(int i = 0; i<lineCount; lineCount++){

                String [] throwawayArray = jTextArea1.getText().split("//n");
            userCodeArray = throwawayArray;
        }

        return userCodeArray;
    } //End of getTextasArray;

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
}

Okay, no offense, but your getTextasArray function is totally jacked. The reason that nothing happens when you press the JButton is because the for loop is infinite due to a typo, no doubt. Let's look at the loop declaration, shall we?

for(int i = 0; i<lineCount; lineCount++){

Can you see what's wrong? Look at the incrementer part. Instead of incrementing i , you increment lineCount , which I don't think you meant to do. This means that i will never be greater than or equal to lineCount . You've gotta be careful about that stuff, as you saw first hand. :)

But let's just get rid of this loop and do it the right way. I kind of see what you were trying to accomplish by using that for loop, but there's a much easier way. Just write your function like this:

public String[] getTextasArray() {
    return jTextArea1.getText().split("\n");       
}

This takes the text area and splits it by newlines. Notice that I used the string \\n instead of //n . Using //n would split it by a literal 'slash slash N`. Hopefully this'll get you what you want!

The problem is this line

String[] userCodeArray = getTextasArray();

Specifically

for(int i = 0; i < lineCount; lineCount++) {
        String [] throwawayArray = jTextArea1.getText().split("//n");
        userCodeArray = throwawayArray;
    }

You are not incrementing i here, but lineCount. This leads to an infinite loop where the handler never terminates.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM