我正在爲我的應用程序啓動啓動畫面。它只是由Graphics2D繪製的靜態BufferedImage,在JFrame內部沒有裝飾。我的問題是:有時窗口繪製不正確,這意味着它並不總是包含我的圖像,有時只是灰色。我嘗試在第二個線程中創建啓動畫面,但它沒有幫助。我可以打電話給splashScreen.repaint()
每一行,但它是胡說八道......這裏是我的代碼:灰色啓動畫面由於沒有重新粉刷
package SeriousSteve.MapEditor;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
/**
* Simple splash screen, contains only the image.
*
* @author m4tx3
*/
public class SplashScreen extends JFrame {
private BufferedImage image;
/**
* Constructor. Creates a window with splash screen, loads an image at the
* URL specified in imageURL, and finally displays this image.
*
* @param imageURL URL to the image that you want to put on the splash
* screen.
*/
public SplashScreen() {
super("Splash screen");
}
public void createSplashScreen(final URL imageURL) {
try {
image = ImageIO.read(imageURL);
} catch (IOException ex) {
Logger.getLogger(SplashScreen.class.getName()).
log(Level.SEVERE, null, ex);
}
setUndecorated(true);
setSize(image.getWidth(), image.getHeight());
setLocationRelativeTo(null);
setVisible(true);
createGraphics();
repaint();
}
/**
* Creates a graphics context and draws a splash screen.
*/
private void createGraphics() {
Graphics2D g = (Graphics2D) getGraphics();
g.drawImage(image, 0, 0, null);
}
/**
* Closes the splash screen and frees the memory taken by the image.
*
* Call this function when the loading is complete.
*/
public void close() {
setVisible(false);
image = null;
dispose();
}
}
和:
SplashScreen splashScreen = new SplashScreen();
splashScreen.createSplashScreen(getClass().getResource(
"Img/splash.png"));
順便說一句, - 我創造我自己的閃屏類,因爲我。我已經在1個jar文件中獲得了2個應用程序(遊戲和地圖編輯器)...我只想在地圖編輯器中顯示啓動畫面,所以我無法修改清單文件。
問候
我不得不添加'drawComponents(getGraphics());',但現在它工作!非常感謝:) – m4tx