javascript - 当Java程序循环访问数千个数据时,如何显示最终用户可见的进度条?

标签 javascript java for-loop servlets progress-bar

我有一个带有一个 for 循环的 Java 方法。该循环迭代数千个数据,并且需要大量时间。在本例中,我想向程序的最终用户显示进度状态。

我已将JProgressBarJFrame一起使用,但它仅在程序在本地计算机中运行时才有效。当我将应用程序部署到远程服务器(生产服务器)并运行它时,进度条不会出现。

下面是我的方法:

public List<EmployeeDetail> getEmployeeDetail(HttpServletRequest request, HttpServletResponse response, String org) {
    List<EmployeeDetail> employeeDetailList = new ArrayList<EmployeeDetail>();
    List<Employee> employeeList = getEmployee(org);

    Connection con = null;
    PreparedStatement st = null;
    ResultSet rs = null;

    String query = "SELECT EMPLOYEE_NUMBER, START_DATE " + " FROM EMPLOYEE_HISTORY_TABLE "
            + "WHERE EMPLOYEE_NUMBER =?";

    DatabaseConnection dbConnection = new DatabaseConnection();

    // --progress bar starts---

    // Create frame for dialog box
    JFrame frame = new JFrame("searching data...");

    // creates progress bar
    final JProgressBar pb = new JProgressBar(0, EmployeeList.size());
    pb.setStringPainted(true);

    // add progress bar
    frame.setLayout(new FlowLayout());
    frame.getContentPane().add(pb);

    frame.setSize(300, 200);
    frame.setVisible(true);

    int counterForProgressBar = 0;
    for (Employee Employee : EmployeeList) {
        try {
            con = dbConnection.getConnectionDetails();
            // --Progress bar continues--
            final int currentValue = counterForProgressBar;

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    pb.setValue(currentValue);
                }
            });
            java.lang.Thread.sleep(100);

            // --Progress bar ends---

            String firstName = Employee.getFirstName();
            String lastName = Employee.getLastName();

            String personNumber = Employee.getPersonNumber;


            st = con.prepareStatement(query);
            st.setString(1, personNumber);
            rs = st.executeQuery();

            while (rs.next()) {
                String employee_number = rs.getString("EMPLOYEE_NUMBER");
                Date START_DATE = rs.getDate("START_DATE");

                EmployeeDetail employeeDetail = new EmployeeDetail(firstName, lastName, employee_number, START_DATE);
                employeeDetailList.add(employeeDetail);
            }
            counterForProgressBar++;

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
                st.close();
                rs.close();
            } catch (SQLException e) {

                e.printStackTrace();
            }
        }
    }

    // When data search process completes close the progress bar
    frame.dispose();
    return employeeDetailList;
}

在这种情况下,您能帮我如何显示进度条/状态吗? 预先感谢您!

最佳答案

您应该以异步方式在另一个线程上完成您的艰苦工作(大循环)。就像让 UI 线程对用户使用react一样,同时,您可以将工作进度发送到 UI 线程。互联网上有很多这样做的例子..

关于javascript - 当Java程序循环访问数千个数据时,如何显示最终用户可见的进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56018472/

相关文章:

java - 程序未编译

java - 如何在java中使用for循环打印所有数组

javascript - 测试 "not null"并在 JS 中相应地设置值的紧凑方法

javascript - 防止全屏菜单滚动

javascript - Bootstrap datetimepicker 将时间设置为 00 :00 not working

javascript - 将 "attribute"或 Class 添加到变量

java - android studio 中包含文件的包或文件夹

java - 从 JSON Java Android 中的嵌入式 MongoID 中获取字符串

javascript - 使用来自 JSON 对象的数据用多条线填充 Chart.Js 线图

r - 在for循环中生成序列