Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTextArea未更新_Java_Swing_Concurrency_Event Dispatch Thread - Fatal编程技术网

Java JTextArea未更新

Java 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

我有一个代码,我从用户那里获取输入,在点击提交按钮后,它执行我的逻辑,并在一个新的帧上向用户显示一个JTextArea,但问题是它在程序完全执行后显示。我已经使用System.out.println和consoleText.append来查看它是否同时发生在eclipse和JTextArea上,但是eclipse上的控制台正在更新代码执行,但JTextArea仅在代码完全执行时显示

这是密码-

MainApp.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