مشاكل في استخدام الرسومات مع الفريق في جافا سوينغ مكتبة

StackOverflow https://stackoverflow.com/questions/279781

سؤال

ويا الجميع، وأنا أحاول لتشغيل البرنامج التالي، ولكن أنا الحصول على 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);       
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top