#java #splash-screen
#java #экран-заставка
Вопрос:
Я хочу создать заставку для моего Java-приложения. Мне удалось сделать это с помощью инструмента NetBeans по умолчанию, который позволяет мне вставлять некоторые изображения. Но я хочу, чтобы там было что-то «живое», например, индикатор выполнения, показывающий статус загрузки приложения, некоторый динамический текст и т.д.
Как мне это сделать? Что мне нужно знать, чтобы начать делать что-то подобное?
Ответ №1:
Вот руководство по Java, в котором рассказывается о том, что именно вы хотите сделать. Вы можете настроить изображение в командной строке так, чтобы оно отображалось немедленно, затем вы можете манипулировать им после инициализации JVM для добавления текста, индикаторов выполнения и т.д.
http://download.oracle.com/javase/tutorial/uiswing/misc/splashscreen.html
Ответ №2:
Хитрость заключается в том, чтобы создать заставку с помощью swing, а затем вызвать с помощью Java reflection метод, который находится в другом файле .java, который загружает приложение. По завершении загрузки удалите свою заставку.
После проверки кода вы поймете, как это работает, и теперь настроите его по-своему.
Вот некоторый код:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JDialog;
/**
*
* @author martijn
*/
public class Splash {
public static void splash() {
try {
final BufferedImage img = ImageIO.read(Splash.class.getResourceAsStream("/path/to/your/splash/image/splash.png"));
JDialog dialog = new JDialog() {
@Override
public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}
};
// use the same size as your image
dialog.setPreferredSize(new Dimension(450, 300));
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.setUndecorated(true);
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
dialog.repaint();
try {
// Now, we are going to init the look and feel:
Class uim = Class.forName("javax.swing.UIManager");
uim.getDeclaredMethod("setLookAndFeel", String.class).invoke(null, (String) uim.getDeclaredMethod("getSystemLookAndFeelClassName").invoke(null));
// And now, we are going to invoke our loader method:
Class clazz = Class.forName("yourpackage.YourClass");
dialog.dispose();
// suppose your method is called init and is static
clazz.getDeclaredMethod("init").invoke(null);
} catch (Exception ex) {
ex.printStackTrace();
}
dialog.dispose();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}