我有一个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());
}
}
问候!