Java 如何使JDialog成为最顶级但不是模态的?

Java 如何使JDialog成为最顶级但不是模态的?,java,applet,jdialog,Java,Applet,Jdialog,我正在创建一个小程序。小程序必须从数据库中获取一些大块数据,而且操作很慢。。。这就是为什么我想创建一个“加载”JDialog,当applet从数据库加载数据时,它将显示在applet顶部,但它不应该阻止用户输入applet。 怎么做?如果我创建的JDialog是“setAlwaysOnTop(true)”,它将不会显示在顶部。如果我将其设置为模态,它将显示,但它不允许我的小程序与DB通信。我甚至试图让“加载”窗口可以运行,并从另一个线程运行,但没有成功 如何为小程序创建适当的、通用的、不会是模态

我正在创建一个小程序。小程序必须从数据库中获取一些大块数据,而且操作很慢。。。这就是为什么我想创建一个“加载”JDialog,当applet从数据库加载数据时,它将显示在applet顶部,但它不应该阻止用户输入applet。
怎么做?如果我创建的JDialog是“setAlwaysOnTop(true)”,它将不会显示在顶部。如果我将其设置为模态,它将显示,但它不允许我的小程序与DB通信。我甚至试图让“加载”窗口可以运行,并从另一个线程运行,但没有成功

如何为小程序创建适当的、通用的、不会是模态的、但始终处于顶端的“加载”JDialog?

调用swing/awt通常是一个非常(我的意思是非常)糟糕的主意
来自非EDT线程。另外,applet JFrame/JDialog在OSX和Windows中的工作方式存在许多问题。在我看来,如果你的小程序只是直接在你的小程序界面中使用
JProgressBarr
或其他东西,那么它将为你带来更好的用户体验。如果您必须弹出一个窗口,请使用JFrame和
AlwaysOnTop=true
。之所以出现这种奇怪的行为,是因为您可能没有使用接受父组件的构造函数,或者只是传入一个
null
值。

没错,我没有将父组件传递给“super”但我似乎不能因为JDialog没有一个将Applet作为父级的构造函数……这是真的,但您可以像这样使用新的JDialog(SwingUtilities.windowForComponent(yourJapplet))。我不明白为什么你必须使用JDialog,它不像你需要模态或任何东西。我需要使用它,因为我正在重构现有的非常复杂的小程序(它就像一个管理投注数据库的独立应用程序),所以我不能完全更改它,它必须保持为小程序:)