【发布时间】:2016-06-01 09:27:34
【问题描述】:
我正在通过 Rhino JS 编写 Java 脚本来制作 Swing 应用程序。我有一个名为open 的JMenuItem,我设置了一个ActionListener,它应该会导致出现JFileChooser 对话框,然后我可以处理结果。用于制作JFileChooser 的代码是:
open.addActionListener(function(event) {
var fileChooser = new JFileChooser()
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG)
print(SwingUtilities.isEventDispatchThread()) // Prints true
var result = fileChooser.showOpenDialog(frame) // frame is a closure variable
if(result === JFileChooser.APPROVE_OPTION) {
print("You have chosen a file!")
}
})
现在,当点击open JMenuItem 时,事件会正确触发,JFileChooser 确实会打开,但它是完全空白的,如下面的屏幕截图所示:
【问题讨论】:
-
frame 是一个闭包变量 我不知道这是什么意思,但是你可以尝试使用
null来代替参数,看看是否会发生同样的事情吗?跨度> -
@Compass > 好吧,我的意思是它是根
JFrame,但它被传递给包含此代码的函数,因此匿名函数可以引用它。我试过你的建议,但没有任何改变。 :( -
弹出后GUI是否响应?我的意思是你可以调整大小,移动一些东西,关闭对话框吗?看起来内部事件循环没有被触发 - 不知道为什么。
-
@Antoniossss > 整个 GUI 在弹出后响应。对话框和父框架都可以调整大小/关闭,我在命令行上没有异常。如果需要,我可以提供更多详细信息。
-
@Miguel 那么这真的很奇怪。如果 GUI 是响应式的,那么一切都应该按预期工作。另一种方法是尝试删除
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG)
标签: java swing jfilechooser rhino