【问题标题】:Do something after static blocks and before the main(String[]) method is called在静态块之后和调用 main(String[]) 方法之前做一些事情
【发布时间】: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


【解决方案1】:

您可以从 LAST 静态块调用 start

【讨论】:

  • 你怎么知道哪个static块是“最后一个”?
  • 文件中哪一个最低
  • 由于他无法控制main,我认为可能有多个文件。不过,我怀疑他是否可以在不修改 main 的情况下做到这一点。
  • 我们应该知道更多细节
  • 无论如何,last static 将在 main 之前最后执行,但仅当类加载时才执行
【解决方案2】:

问题不在于静态块和无法自行加载的东西;我遇到了问题,因为我的 SecurityManager 阻止了一切...我更改了我处理权限的方式(白名单 ==> 黑名单),它现在可以工作了!

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多