На самом деле нет хорошего решения, это один из недостатков Java. Это сказанное продолжайте читать для моей идеи.
Есть две части для загрузки класса.
- JVM загружает файл класса в
ClassLoader, когда это необходимо.
- JIT компилирует и оптимизирует
кодировать при первом запуске пути.
Вы можете делать то, что предлагает rekin, а именно: загружать классы пользовательского интерфейса до того, как они понадобятся. Это только частично решит вашу проблему, потому что вы получаете только некоторые из классов. Это также будет иметь недостаток, заключающийся в том, что он будет занимать гораздо больше памяти, и даже классы в загрузчике классов будут собираться мусором при необходимости.
Чтобы избежать некоторых неприятностей, которые вы получаете с помощью подхода отражения.
Один из способов, который вы можете попробовать, - это убедиться, что конструктор не отображает окно, в вашем окне есть другой метод, который будет отображать окно, называемое init (). Затем создайте новый поток из основного вызова для каждой из Windows, которую вы используете. хочу предварительно загрузить.
Не сохраняйте ссылку на окно.
В реальном коде вы вызываете конструктор, а затем init () для каждого окна, которое хотите отобразить. Это даст вам наилучший из возможных сценариев с точки зрения производительности, потому что теперь вы загружаете классы и запускаете код конструктора. Конечно, размер программы в памяти будет раздутым.
public static void main(String [] args) {
// Construct main Frame on Swing EDT thread
Thread thread = new Thread() {
public void run() {
// now the background init stuff
new com.yourcompany.view.Dialog1();
new com.yourcompany.view.WizardGUI();
new com.yourcompany.view.SecondaryFrame();
// Here all the views are loaded and initialized
}
};
JFrame mainFrame = new JFrame();
mainFrame.setVisible();
// etc.
}