【发布时间】:2014-12-22 16:25:05
【问题描述】:
我想在调用main(String[]) 方法之前和在触发每个静态块(static{})之后触发start() 方法,以便Java 的重要部分(如AWT/Swing)在该方法时完全正常运行运行。
start() 加载文件和图像,设置SecurityManager 并打开一个弹出窗口,告诉用户一切是否正常。不幸的是,当我调用JOptionPane.showMessageDialog(stuff) 时抛出异常。 http://pastebin.com/FG3y0i9Z
使用SwingUtilities.invokeLater(Runnable) 不起作用并引发相同的异常。
我认为这是因为 AWT 或 Swing 没有通过静态块正确加载自身。
我对主要方法没有任何控制:我无法修改它,我不知道它的路径。
有什么办法可以做到吗?
【问题讨论】:
-
或者你可以使用 premain 方法docs.oracle.com/javase/7/docs/api/java/lang/instrument/… 并附加代理
-
您实际上可能想要别的东西。请注意,swing 代码在单独的线程中执行,称为“事件调度线程”。要将某些内容放入该线程的队列中,请使用
SwingUtilities.invokeLater()方法。 -
@Dims 当我这样做时抛出异常(pastebin.com/FG3y0i9Z)(我在静态块中调用了 start())
-
@utybo,您能否详细说明一下这个问题。 1)在什么意义上你不能控制主要方法? 2) 你想通过调用 start 来达到什么目的?
-
@aioobe 刚刚修改了问题,如有遗漏请告诉我
标签: java swing initialization