Java JTextArea未更新
我有一个代码,我从用户那里获取输入,在点击提交按钮后,它执行我的逻辑,并在一个新的帧上向用户显示一个JTextArea,但问题是它在程序完全执行后显示。我已经使用System.out.println和consoleText.append来查看它是否同时发生在eclipse和JTextArea上,但是eclipse上的控制台正在更新代码执行,但JTextArea仅在代码完全执行时显示 这是密码- MainApp.javaJava JTextArea未更新,java,swing,concurrency,event-dispatch-thread,Java,Swing,Concurrency,Event Dispatch Thread,我有一个代码,我从用户那里获取输入,在点击提交按钮后,它执行我的逻辑,并在一个新的帧上向用户显示一个JTextArea,但问题是它在程序完全执行后显示。我已经使用System.out.println和consoleText.append来查看它是否同时发生在eclipse和JTextArea上,但是eclipse上的控制台正在更新代码执行,但JTextArea仅在代码完全执行时显示 这是密码- MainApp.java import javax.swing.JFrame; import java
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import com.skillnetinc.marker.utility.InputUtility;
public class MainApp {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
showGUI();
}
});
}
protected static void showGUI() {
JFrame inputFrame = new JFrame("Marker Deletion Script");
inputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
inputFrame.setSize(800, 300);// 800 width and 500 height
inputFrame.setLayout(null);// using no layout managers
inputFrame.setVisible(true);// making the frame visible
inputFrame.setLocationRelativeTo(null);
InputUtility.showUserInputFields(inputFrame);
InputUtility.buttonActivity(inputFrame);
}
}
&InputUtility.java
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class InputUtility {
public static JFrame tableFrame;
public static JTextArea markerDesc, consoleText;
public static JLabel labelMarkerDesc;
public static void showUserInputFields(JFrame inputFrame) {
labelMarkerDesc = new JLabel("<html>Marker<br>Description</html>");
labelMarkerDesc.setBounds(50, 115, 100, 30);
markerDesc = new JTextArea(10, 20);
markerDesc.setBounds(150, 15, 300, 230);
markerDesc.setBorder(BorderFactory.createLineBorder(Color.gray));
inputFrame.add(markerDesc);
inputFrame.add(labelMarkerDesc);
}
public static void buttonActivity(JFrame inputFrame) {
JButton submit = new JButton("SUBMIT");
submit.setBounds(520, 50, 150, 40);
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
consoleText = new JTextArea();
consoleText.setEditable(false);
consoleText.setVisible(true);
JScrollPane sp = new JScrollPane(consoleText);
tableFrame = new JFrame("Script Result");
tableFrame.add(sp);
tableFrame.setSize(800, 300);
tableFrame.setVisible(true);
tableFrame.setLocationRelativeTo(null);
testConsole(consoleText);
}
});
inputFrame.add(submit);
}
public static void testConsole(JTextArea consoleText) {
String marker[] = InputUtility.markerDesc.getText().split("\n");
for (int i = 0; i < marker.length; i++) {
String posName = marker[i].split(" ")[0];
File file = new File("\\\\" + posName + "\\C$\\environment\\marker");
consoleText.append("\nChecking for marker inside " + file);
System.out.println("\nChecking for marker inside " + file);
File[] files = file.listFiles();
if (file.canRead()) {
consoleText.append("Found Total " + files.length + " markers inside " + file);
System.out.println("Found Total " + files.length + " markers inside " + file);
}
}
}
}
这回答了你的问题吗?1) 应用程序应该只有一个父JFrame。对于子窗口,您可以使用JDialog 2)您的任务正在
事件调度线程(EDT)
上运行,并且在所有处理完成之前无法刷新GUI。解决方案是使用单独的线程。最简单的方法是使用SwingWorker
和“publish()”在结果可用时发布它们。阅读Swing教程中的一节,了解更多信息和SwingWorker的示例。Java GUI必须在不同的环境中使用不同的PLAF在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。
192.168.75.18 startup.err
192.168.87.99 startup.err
192.168.66.38 startup.err