我对任何类型或applet编程都是全新的,我的代码非常粗糙。目前我正在制作一个小应用程序,让您可以根据他们所在的大陆了解不同的国家。这是非常简单的东西,但我仍在努力。目前我收到错误
线程“AWT-EventQueue-1”中的异常java.lang.NullPointerException
at Culminating1.instructions1(Culminating1.java:69). This line is a simple g.setColor(Color.yellow);.
我的代码非常粗糙,需要大量的工作才能获得任何帮助。
这是我的其余代码。非常感谢!
import java.applet.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.JComponent;
import java.awt.Color.*;
public class Culminating1 extends Applet {
private Image world, destination, globetrot, rice;
private Button africa, americas, asia, europe, instructions, japan, china, qatar, uae, thailand;
private Graphics g = null;
public void init() {
this.setLayout(null);
asia = new Button("Asia");
africa = new Button("Africa");
europe = new Button("Europe");
americas = new Button("Americas");
instructions = new Button("Instructions");
add(asia);
asia.setBounds(10, 120, 65, 25);
add(africa);
africa.setBounds(10, 190, 65, 25);
add(americas);
americas.setBounds(10, 260, 65, 25);
europe.setBounds(10, 330, 65, 25);
add(europe);
instructions.setBounds(10, 410, 65, 25);
add(instructions);
world = getImage(getCodeBase(), "world.gif");
destination = getImage(getCodeBase(), "Destination2.png");
globetrot = getImage(getCodeBase(), "GlobeTrot.png");
} // init method
@Override
public void paint(Graphics g)
{
g.setColor(Color.orange);
g.fillRect(0, 0, 1000, 1000);
g.drawImage(world, 200, 100, 300, 300, this);
g.drawImage(destination, 150, 425, 450, 80, this);
g.drawImage(globetrot, 150, 10, 450, 80, this);
} // paint method
@Override
public boolean action(Event e, Object o) {
if (e.target == instructions) {
instructions1();
} else if (e.target == asia) {
asia();
}
return false;
}
public void instructions1() {
JFrame jp1 = new JFrame();
Culminating1 a=new Culminating1 ();
jp1.getContentPane().add(a, BorderLayout.CENTER);
jp1.setSize(new Dimension(500,500));
jp1.setVisible(true);
g.setColor(Color.yellow);
g.fillRect(0, 0, 1000, 1000);
Font f;
f = new Font("Broadway", Font.PLAIN, 20);
g.setFont(f);
g.setColor (Color.black);
g.drawString("Welcome to Globe Trot!", 200, 20);
g.drawString("In this game you will learn about countries around the world.", 200, 40);
g.drawString("First choose an area of the world,", 200, 80);
g.drawString("then at random a well known landscape will appear.", 200, 120);
g.drawString("Your goal is to guess the country where the landscape is from.", 200, 160);
g.drawString("If you are unable to guess after 10 seconds a flag will appear", 200, 200);
g.drawString("from the same country. You have one minute to guess the country", 200, 240);
g.drawString("before you move onto the next country. There are five in total", 200, 280);
}
} //测试类
答案 0 :(得分:2)
你说:
这一行是一个简单的g.setColor(Color.yellow);。
没什么简单的。您在此行上将g设置为null:
private Graphics g = null;
然后在它上面调用一个方法,所以你得到一个NPE就不足为奇了。
解决方案:
g
字段没有影响,实际上阴影字段。此外:
paintComponent(Graphics g)
方法的类,并在那里进行绘制。 修改强>
你在评论中说明了
感谢您的建议我真的不知道我在做什么,但是我想在paint方法之外使用图形类,无论如何我能够做到这一点或者是不可能的。
这是可能的,但需要技巧。
paintComponent(Graphics g)
方法。 编辑2
下一条评论:
所以我所拥有的是一个基本的介绍屏幕,我想要做的是当用户点击其中一个按钮将它们带到另一个屏幕时。我一直试图用一种方法来做到这一点。
我认为最好是在文本组件中交换文本,或者使用CardLayout交换JPanel。
在单击按钮后发送到的屏幕上需要图形,这就是我试图引入图形类的原因。
再次,您可以使用CardLayout,将JPanel中的JPanels交换到显示JPanel,并在显示JPanel的paintComponent(Graphics g)
方法覆盖中执行您的图形。