JFrame在IDE之外没有理由冻结

时间:2015-07-06 18:55:17

标签: java swing netbeans

我有一个Java应用程序,当我使用我的IDE(Netbeans)运行它时工作正常。该应用程序是一个简单的JFrame,带有JScrollPane,JTextArea(作为logger)和JButton来执行main函数。问题是,当我“清理并构建”项目并在IDE外部执行它时,当我点击JButton时,它会毫无理由地自行冻结。程序运行时,JScrollPane更改为indertemine模式,但它在中间冻结!我试图用控制台执行以查看一些异常,但没有任何反应。

TestSwingThread.java

package testswingthread;

public class TestSwingThread 
{
    public static void main(String[] args) 
    {
        DisplayWindow dw = new DisplayWindow();

        //FRAME PROPERTIES
        dw.setTitle("Test");
        dw.setResizable(false);
        dw.setLocationRelativeTo(null);
        dw.setVisible(true);
    }
}

DisplayWindow.java

package testswingthread;

public class DisplayWindow extends javax.swing.JFrame {

    public DisplayWindow() 
    {
        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();
        mainActionButton = new javax.swing.JButton();
        statusBar = new javax.swing.JProgressBar();
        jScrollPane2 = new javax.swing.JScrollPane();
        logger = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Datos"));

        mainActionButton.setText("MainAction");
        mainActionButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mainActionButtonActionPerformed(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()
                .addComponent(mainActionButton)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(mainActionButton)
                .addGap(0, 54, Short.MAX_VALUE))
        );

        logger.setEditable(false);
        logger.setBackground(new java.awt.Color(225, 224, 224));
        logger.setColumns(20);
        logger.setFont(new java.awt.Font("Courier New", 0, 15)); // NOI18N
        logger.setRows(5);
        logger.setBorder(javax.swing.BorderFactory.createTitledBorder("Logger"));
        logger.setCaretColor(new java.awt.Color(255, 255, 255));
        jScrollPane2.setViewportView(logger);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE)
                    .addComponent(statusBar, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(statusBar, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE)
                .addGap(6, 6, 6))
        );

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

    private void mainActionButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                 

        Runnable e = new MainActionButtonActions(this);
        Thread process_e = new Thread(e);
        process_e.start();
    }                                                

    public void blockButtons()
    {
        mainActionButton.setEnabled(false);
    }

    public void unblockButtons()
    {
        mainActionButton.setEnabled(true);
    }

    // Variables declaration - do not modify                     
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane2;
    public javax.swing.JTextArea logger;
    private javax.swing.JButton mainActionButton;
    public javax.swing.JProgressBar statusBar;
    // End of variables declaration                   
}

MainActionButtonActions.java

package testswingthread;

import javax.swing.JTextArea;


public class MainActionButtonActions implements Runnable
{
    private final JTextArea logger;
    private final DisplayWindow window;

    public MainActionButtonActions(DisplayWindow p_window)
    {
        window = p_window;
        logger = window.logger;
        logger.setText(null); //CLEAR THE LOG
    }

    public void run() 
    {
        exec();
    }

    public boolean exec()
    {
        boolean result = false;

        window.blockButtons();
        window.statusBar.setIndeterminate(true);

        appendToLogger("TRY ONE..");
        appendToLogger("TRY TWO..");
        appendToLogger("TRY THREE..");

        window.unblockButtons();
        window.statusBar.setIndeterminate(false);
        return result;
    }

    private void appendToLogger(String text)
    {
        logger.append("\n" + text);
        logger.setCaretPosition(logger.getDocument().getLength());
    } 

}

问候!

0 个答案:

没有答案