在我的主类中,我调用一个类,在实例化时,应该显示它的JFrame窗口。但事实并非如此。当我通过Eclipse运行项目之前,我曾经有过这个课程。现在,通过命令行运行它,它不起作用:(。
从我的主要方法:
PaintTitleMovie q = new PaintTitleMovie();
Jframe类:
public class PaintTitleMovie extends JPanel implements MouseListener {
Image image;
Font ConfettiFinal = new Font("Analog", 1, 20); // fail safe
static JFrame frame = new JFrame();
public PaintTitleMovie() {
image = Toolkit.getDefaultToolkit().createImage("src/Title2.gif");
try {
Font Confetti = Font.createFont(Font.TRUETYPE_FONT, new File(
"src/Fonts/Confetti.ttf"));
ConfettiFinal = Confetti.deriveFont(1, 50);
} catch (FontFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
addMouseListener(this);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
g.drawImage(image, 0, 0, this);
}
// draw exit button
g.setColor(Color.BLUE);
g.fillRect(990, 50, 210, 100);
g.setColor(Color.BLACK);
g.fillRect(1000, 60, 190, 80);
g.setColor(Color.WHITE);
g.setFont(ConfettiFinal);
g.drawString("Continue", 1000, 120);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.add(new PaintTitleMovie());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1200, 800);
frame.setUndecorated(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
SongTitle s = new SongTitle();
}
});
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
int x = arg0.getX();
int y = arg0.getY();
if (x >= 990 && y >= 50 && y <= 150) {
this.setVisible(false);
frame.dispose();
PaintMenu load = new PaintMenu(); // load paint menu
}
}
}
答案 0 :(得分:1)
这个src/Title2.gif
会出现问题,构建程序时src
目录将不存在。
Toolkit.getDefaultToolkit().createImage(String)
还假定资源是文件系统上的文件,但应用程序上下文(或jar文件)中包含的任何内容都被视为嵌入式资源,不能视为文件。
相反,您可能需要使用更像
的内容image = ImageIO.read(getClass().getResource("/Title2.gif"));
这将返回BufferedImage
,但如果无法加载图像,也会抛出IOException
。如果gif是动画gif,你需要使用更像
image = new ImageIcon(getClass().getResource("/Title2.gif"));
您的字体也是如此,但在这种情况下,您可能需要使用
Font Confetti = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream(
"/Fonts/Confetti.ttf"));
如果您正在使用Eclipse,则可能需要将这些资源移出src
目录以及与src
目录相同级别的“resources”目录,以便它们能够被包括在最终版本中。