0

我的应用程序与第 3 方独立应用程序集成,它将在单独的线程中打开 JOptionPane 对话框,我正在运行线程以关闭所有打开的对话框。因此,在关闭之前,我需要在对话框中写入消息。

我试图实现的示例主程序:

   public static void main(String[] args)throws Exception{
    ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
    executor.scheduleAtFixedRate(() -> {
        Window[] possibleWindow = Window.getWindows();
        if (possibleWindow != null && possibleWindow.length > 0) {
            System.out.println("Found " + possibleWindow.length + "Window(s) " + possibleWindow[0].getClass().getSuperclass());
            for (int i = possibleWindow.length - 1; i >= 0; i--) {
                try {
                    Window window = possibleWindow[i];
                    //here where I need to get the dialog box message before closing it.
                    window.dispose();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }, 1, 1, TimeUnit.SECONDS);

    JOptionPane.showMessageDialog(null, "test !!!!");
}
4

3 回答 3

1

如果我正确地回答了您的问题,您将创建 JOptionPane 对象并给他们一条消息;后来,你想知道你给他们的信息吗?

如果是这样,一个简单的解决方案是创建一个中央地图,例如Map<JOptionPane, String>. 每次创建新的 JOptionPane 时,您都会记住它(及其消息);并在清理时;您只需获取那些仍在运行的 JOptionPane 对象的消息。

于 2016-07-13T06:26:00.843 回答
0

这个解决方案对我有用:

   if (window instanceof JDialog) {
        System.out.println("text : " + ((JOptionPane)((JDialog) window).getContentPane().getComponents()[0]).getMessage());
    }
于 2016-07-13T11:02:05.310 回答
0

您需要递归地使用窗口的所有组件。此解决方案适用于您的情况:

public static String getMess(Container w){              
    for (Component component : w.getComponents()) {
        if (component instanceof JLabel) {
            return ((JLabel) component).getText();
        }
        else if (component instanceof JTextField){
            return ((JTextField) component).getText();
        }
        else if (component instanceof Container){
            String s = getMess((Container) component);
            if (!s.isEmpty()){
                return s;
            }
        }
    }
    return "";
}
于 2016-07-13T06:44:37.500 回答