程序无法向 JTextArea 添加文本

Program unable to add text to JTextArea

我制作了一个程序,它制作了一个名为 Window() 的 GUI,并指示我的 Finch 机器人跟随一个物体。当我 运行 程序时,没有文本添加到 JTextArea。它应该说请点击 Finch 以激活。

我的程序告诉我这一行是错误的来源:

NewOption5.feed.append("Please Tap Finch to Activate!");

控制台:

正在连接到 Finch...这可能需要几秒钟...

线程异常 "main" java.lang.NullPointerException

在 NewOption5.ProgramFollow(NewOption5.java:58)

在 NewOption5.main(NewOption5.java:12)

代码:

import edu.cmu.ri.createlab.terk.robot.finch.Finch;
import java.awt.*;
import javax.swing.*;

 public class NewOption5 {

    static JTextArea feed;

    static Finch myFinch = new Finch();

public static void main(String[] args) {
    //Calling Window    
//  myFinch = new Finch();
    Window();
    ProgramFollow();



}



// Method for creating a GUI

//static Finch myFinch = new Finch();
public static void Window()
    {
  // Create the window
    JFrame x = new JFrame("Finch Mission : Follow an Object!");

 // How the window should be closed
    x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//  Adding a layout manager
    x.setLayout(new FlowLayout());

//  Adding components ( significantly a JTextArea being a feedback box )
    x.add(new JButton("Halt!"));
    x.add(new JButton("Exit"));
    final JTextArea feed = new JTextArea(30,50);
    JScrollPane feedscroll = new JScrollPane(feed);
    x.add(feedscroll);


// Arrange components neatly inside the window
    x.pack();

// Making the window visible once Window is called
    x.setVisible(true);
//  ProgramFollow();
}





public static void ProgramFollow() {

    // Loop to wait for Finch to be tapped and an obstacle detected in front of the Finch   
    boolean StartProgram;
    NewOption5.feed.append("Please Tap Finch to Activate!");    

    while (StartProgram = true)
    {   
    // Sending message to the feedback box
    feed.append("Please Tap Finch to Activate!");   

    // Conditional statement for same thing as mentioned above  

    if (myFinch.isTapped()==true && myFinch.isObstacleLeftSide()==true && myFinch.isObstacleRightSide()==true)
    {   
    NewOption5.feed.append("Finch is activated! Object is detected");   
    myFinch.setLED(red,0,0);
    myFinch.setWheelVelocities(leftVelocity, rightVelocity);

    // Triggers RunAgain to true so the program doesnt stop in one run in order for Finch to move continuosuly


    boolean RunAgain=true;




    while(RunAgain)
    {

    // Calling Movement method  for Finch movements

    Movement();

    // Inside while(RunAgain loop , there is a conditional statment which makes the Finch terminate the program after tapping it twice

    if (myFinch.isTapped()==true && myFinch.isTapped()==true)
    {



    }
    }
    }
    }
    }



    // Method for Finch movements

    public static  void Movement()

    {

    if (myFinch.isObstacleLeftSide()==false && myFinch.isObstacleRightSide()==false)

    {

    // send message to the feedback box ("Object is Detected! Following it now!");
    NewOption5.feed.append("Following the Object now!");

    StraightMovement();

    }

    else if (myFinch.isObstacleLeftSide()==true && myFinch.isObstacleRightSide()==false)

    {

    NewOption5.feed.append("Object detected on the left side"); 

    LeftMovement();

    }

    else if (myFinch.isObstacleLeftSide()==false && myFinch.isObstacleRightSide()==true)

    {

    NewOption5.feed.append("Object detected on the right side");

    RightMovement();

    }

    else if (myFinch.isObstacleLeftSide()==true && myFinch.isObstacleRightSide()==true)

    {

    NewOption5.feed.append("Stopped now");  

    StopMovement();

    }

    }


    // Area of variables declaration for easy value modifications

    static int Buzz = 340;
    static int BuzzDuration = 10;


    static int red = 255;
    static int green = 255;

    static int leftVelocity = 100;
    static int rightVelocity = 100;

    static int leftTurnV = -50;
    static int rightTurnV = -50;;


    // Area of variables declaration for easy value modifications


    public static void StraightMovement()

    {

    myFinch.setLED(0, green, 0);

    myFinch.setWheelVelocities(leftVelocity, rightVelocity);

    myFinch.buzz(Buzz, BuzzDuration);

    }

    public static void LeftMovement()

    {

    myFinch.setLED(0, green, 0);

    myFinch.setWheelVelocities(leftTurnV, rightVelocity);

    myFinch.buzz(Buzz, BuzzDuration);

    }

    public static void RightMovement()

    {

    myFinch.setLED(0, green, 0);

    myFinch.setWheelVelocities(leftVelocity, rightTurnV);

    myFinch.buzz(Buzz, BuzzDuration);

    }

    public static void StopMovement()

    {

    myFinch.setLED(red, 0 , 0);

    myFinch.stopWheels();

    myFinch.buzz(Buzz, BuzzDuration);

    }


    }

您没有正确初始化 feed

final JTextArea feed = new JTextArea(30,50); 这不会初始化字段 feed,而是创建一个新的同名 局部变量

尝试将 final JTextArea feed = new JTextArea(30,50); 变成 feed = new JTextArea(30,50);