2

我需要一种方法来允许我的程序在调用此方法后继续运行代码。

目前,它等待半小时,获取信息,将其存储到对象 WeatherCard,并显示它,然后重复。但它挂在 JOptionPane 上。我需要一种方法来使程序要么继续在 JOptionPane 下方运行,要么在大约 10 秒后关闭窗格。我不确定如何在我的代码中工作,目前

public void printWeatherCard(WeatherCard w, JFrame controlFrame) throws MalformedURLException, IOException{
    /* Displays a dialog box containing the temperature and location */
    BufferedImage img = ImageIO.read(new URL(w.imgSrc));
    ImageIcon icon = new ImageIcon(img);

    JOptionPane.showMessageDialog(controlFrame, "It is currently " + w.currentTemp + " \u00B0 F in " + w.location.city + ", " + w.location.state + ".\nCurrent humidity: " + w.currentHumidity + 
            "%.\nChance of precipitation: " + w.chancePrecip + "%.", "Weather Update: " + w.location.zipCode, JOptionPane.INFORMATION_MESSAGE, icon);
}
4

3 回答 3

3

在延迟一段时间后关闭模态对话框并更新模态对话框后面的显示是不同的问题。

  • 在此示例中,ajavax.swing.Timer用于标记时间,当计数器达到零或用户关闭对话框时,对话框将关闭。

  • 模态对话框只会阻止用户交互。向此示例添加一个模式对话框,以查看 GUI 更新继续响应javax.swing.Timer.

    public void run() {
        ...
        f.setVisible(true);
        JOptionPane.showMessageDialog(dt, TITLE);
    }
    
于 2013-09-10T20:57:55.290 回答
1

但它挂在 JOptionPane 上。我需要一种方法来使程序要么继续在 JOptionPane 下方运行,要么在大约 10 秒后关闭窗格。我不确定如何在我的代码中工作,目前

有两种方法

  • (更好更容易,更舒适)创建JDialog(JFrame parent, boolean true),默认关闭操作HIDE_ON_CLOSE,只有一个JDialog作为e ,local variabl重用这个ObjectsetVisible(false/true)

  • 通过_@kleopatra

于 2013-09-10T19:19:42.683 回答
0

JOptionPane 是模态的,这意味着代码执行会阻塞,直到用户关闭或确认它。您需要使用非模态对话框。考虑创建自己的 JDialog。http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

于 2013-09-10T19:21:24.873 回答