Хорошо, поэтому мне было интересно, может ли кто-нибудь сказать мне, где я иду не так.Внедрение JApplet в JFrame
У меня есть JApplet называется игра, которая отлично работает, если я запускаю ее из затмения, используя AppletViewer и JFrame, называемый GUI, который содержит JApplet. Вот код для обоих:
PS. я избавился от большей части кода от игры, чтобы сделать его меньше, теперь он просто базовый.
Game.java:
package com.ion.brickdodge;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JApplet;
public class Game extends JApplet implements Runnable{
private static final long serialVersionUID = 1L;
Image man1;
Image man2;
Image cman;
int WIDTH = 250;
int HEIGHT = 350;
int lives = 3;
int spx = WIDTH/2;
int score = 0;
Image dbImage;
Graphics dbg;
public void init() {
setSize (WIDTH, HEIGHT);
setFocusable(true);
setBackground(Color.LIGHT_GRAY);
man1 = getImage(getCodeBase(), "res/man1.png");
man2 = getImage(getCodeBase(), "res/man2.png");
cman = man1;
}
public void start() {
Thread th = new Thread(this);
th.start();
}
public void run() {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while(true){
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
public void paint(Graphics g) {
g.drawImage(cman, spx, 320, this);
g.setColor(Color.BLACK);
g.drawString("Score: " + score, 5, 10);
g.drawString("Lives: " + lives, 5, 25);
}
public void update(Graphics g){
if (dbImage == null)
{
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics();
}
dbg.setColor (getBackground());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
dbg.setColor (getForeground());
paint (dbg);
g.drawImage (dbImage, 0, 0, this);
}
}
А вот GUI.java:
package com.ion.brickdodge;
import java.awt.BorderLayout;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI {
public static void main(String args[]) {
JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1000, 1000);
JPanel panel = new JPanel(new BorderLayout());
frame.add(panel);
JApplet applet = new Game();
panel.add(applet, BorderLayout.CENTER);
applet.init();
frame.pack();
frame.setVisible(true);
}
}
Ошибка GUI.java бросает, когда я запускаю это ...
Exception in thread "main" java.lang.NullPointerException
at java.applet.Applet.getCodeBase(Unknown Source)
at com.ion.brickdodge.Game.init(Game.java:30)
at com.ion.brickdodge.GUI.main(GUI.java:22)
Любая помощь будет очень признана
Почему вы пытаетесь это сделать? почему бы просто не создать свой класс JPanel, а затем использовать его как апплет или рабочий стол, как вам хочется, просто поместив его в JApplet или JFrame по мере необходимости? –
Ваш NPE, вероятно, генерируется 'man1 = getImage (getCodeBase()," res/man1.png ");' –
Являются ли файлы изображений в том же каталоге, что и сам апплет? – fireshadow52