مشاكل في استخدام الرسومات مع الفريق في جافا سوينغ مكتبة
-
07-07-2019 - |
سؤال
ويا الجميع، وأنا أحاول لتشغيل البرنامج التالي، ولكن أنا الحصول على NullPointerException. أنا جديدة إلى المكتبة البديل جافا حتى أتمكن من أن تفعل شيئا غبيا جدا. وفي كلتا الحالتين هنا هي بلدي فئتين أنا مجرد اللعب حولها في الوقت الراهن وكل ما أريد القيام به هو رسم دائرة لعنة (نريد سوء رسم gallow، مع الجلاد على ذلك في النهاية).
package hangman2;
import java.awt.*;
import javax.swing.*;
public class Hangman2 extends JFrame{
private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
private Gallow gallow = new Gallow();
public Hangman2() {
setLayout(alphabetLayout);
setSize(1000,500);
setVisible( true );
}
public static void main( String args[] ) {
Hangman2 application = new Hangman2();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}
package hangman2;
import java.awt.*;
import javax.swing.*;
public class Gallow extends JPanel {
private Graphics g;
public Gallow(){
g.fillOval(10, 20, 40, 25);
}
}
ووNullPointerException يأتي في خط g.fillOval.
ويرجع الفضل في ذلك مسبقا،
وتوميك
المحلول
وأنت تحصل NPE بسبب عدم تعيين g
، وبالتالي، فإنه من null
. وعلاوة على ذلك، يجب أن لا يكون فعل الرسم في المنشئ. الزائد paintComponent(Graphics g)
بدلا من ذلك.
public class Gallow extends JPanel {
public paintComponent(Graphics g){
g.fillOval(10, 20, 40, 25);
}
}
وأود أن ننظر أيضا إلى <لأ href = "http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/BufferedImage.html" يختلط = "نوفولو noreferrer" > BufferedImage .
نصائح أخرى
وهناك بضعة أشياء: لا تنس أن تضيف لوحة لJFrame
. وتجاوز أسلوب paint()
من JPanel
عن اللوحة المخصصة الخاصة بك. أنت لا تحتاج إلى إعلان كائن الرسومات منذ طريقة الطلاء JPanel
سوف يكون إشارة إلى واحد في أي حال.
package hangman2;
import java.awt.*;
import javax.swing.*;
public class Hangman2 extends JFrame{
private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
private Gallow gallow = new Gallow();
public Hangman2() {
setLayout(alphabetLayout);
add(gallow, BorderLayout.CENTER);//here
setSize(1000,500);
setVisible( true );
}
public static void main( String args[] ) {
Hangman2 application = new Hangman2();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}
package hangman2;
import java.awt.*;
import javax.swing.*;
public class Gallow extends JPanel {
public Gallow(){
super();
}
public void paint(Graphics g){
g.fillOval(10, 20, 40, 25);
}
}