I have been trying to fix my .setText crash issue, which occures when i press the num0
button randomly.
- But it seems i can only resolve it by using
new Thread(new Runnable() { __overwrite__swing__textfields___ });
but in that case i can not access myJTextField
.
Therefore i have written a RunnableOutput
class to send and apply but t
hat also failing. Example:
RunnableOutput.java
package ui;
import java.awt.ComponentOrientation;
import javax.swing.*;
/**
* JTextField - Wrapper for thread-safe
*
* @author root
*/
public class RunnableOutput implements Runnable {
private JTextField outputArea;
private String messageToAppend;
// initialze outputArea and message
public RunnableOutput(JTextField output, String message) {
outputArea = output;
messageToAppend = message;
}
@Override
public void run() {
outputArea.setText(messageToAppend);
}
}
Menu.java:
public static JTextField nameTextField0 = new JTextField(20);
public void IPpanel(JPanel configPanel) {
JPanel Numlock = new JPanel(new GridLayout(0,12));
JButton num0 = new JButton("0");
num0.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
// Fails:
// was expecting this should fixed it but indeed still not
SwingUtilities.invokeLater(
new RunnableOutput(nameTextField0, "Unit test: 0"));
// Fails:
// wont work few times works but when randomly i press the
// button it fails
// Same result with: SwingUtilities.invokeAndWait();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
nameTextField0.setText("Unit test: 1");
}
});
// Works: does not freez but does not change/apply the values
new Thread(new Runnable() {
Menu.nameTextField0.setText("Unit test: 2");
});
}
});
Numlock.add(num0);
configPanel.setLayout(new GridLayout(0,1));
configPanel.add(Numlock);
}
Follow up:
- Used Polymorphism and that fix all those