簡體   English   中英

為什么在按下JButton之后什么也沒發生

[英]Why nothing happens after JButton is pressed

我有以下代碼-生成了除定義按下按鈕時應采取的操作的方法以外的所有Netbeans。 當我按下按鈕時,首先它不會恢復,並且在Netbeans IDE的標准輸出窗口中什么也沒有顯示。 怎么了?

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                   
}

好的,沒有冒犯,但您的getTextasArray函數完全被劫持了。 毫無疑問,按下JButton時什么也不發生的原因是因為輸入錯誤, for循環是無限的。 讓我們看一下循環聲明,好嗎?

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

你看到什么問題了嗎? 看一下增量器部分。 不用增加i ,而是增加lineCount ,我認為這不是您想要的。 這意味着i將永遠不會大於或等於lineCount 正如您親眼所見,您必須小心這些內容。 :)

但是,讓我們擺脫這個循環並以正確的方式進行操作。 我有點想知道您要通過使用for循環來完成什么,但是有一種簡單的方法。 像這樣編寫您的函數:

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

這將占用文本區域並用換行符將其分割。 注意,我使用字符串\\n代替//n 使用//n會將其拆分為文字“斜杠//n ”。 希望這會給您您想要的!

問題是這條線

String[] userCodeArray = getTextasArray();

特別

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

您不是在這里遞增i,而是lineCount。 這導致處理程序永不終止的無限循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM