gpt4 book ai didi

java - 如何将文本附加到另一个类的 JTextArea?

转载 作者:行者123 更新时间:2023-11-29 07:50:52 25 4
gpt4 key购买 nike

我正在尝试在我的 GUI 上放置一个控制台类型的东西,为此我很确定我必须将文本附加到 JTextArea。为了使控制台真正有值(value),我必须附加来自不同类的文本。为此,我构建了一个方法来将字符串附加到我的控制台,但它抛出了 NullPointerException 并失败了。

我想知道如何将其他类的文本附加到我的控制台 (JTextArea)。

这是我的代码:

package com.robot;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;

public class GUI extends JFrame implements Runnable {

static JTextArea console;

//defines the line break
static String newline = System.getProperty("line.separator");

//start of the constructor method for GUI
public GUI() {

//makes the program unable to be resized
this.setResizable(false);

//allows the user to close the program with the x button
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//sets the title of the program
this.setTitle("ROBOT Alpha Alfred Version 3.0");

//creates panels to hold the elements of the GUI
JPanel mainPanel = new JPanel();
JPanel buttonPanel = new JPanel();
JPanel consolePanel = new JPanel();

//creates buttons
JButton runDemo = new JButton("Run Demo");
JButton runLive = new JButton("Run Live");
JButton scan = new JButton("Scan Market");
JButton findPatterns = new JButton("Find Patterns");
JButton cleanFolder = new JButton("Clean Up Folder");
JButton configureSettings = new JButton("Configure Settings");

//creates the console
JTextArea console = new JTextArea(6, 40);

//sets the default text of the console
console.setText("----------------------- ROBOT Console -----------------------" + newline);

//makes the console unable to be edited
console.setEditable(false);

//sets the line wrapping of the console
console.setLineWrap(true);
console.setWrapStyleWord(true);

//creates scroll bars
JScrollPane scrollBar = new JScrollPane(console);
scrollBar.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollBar.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);

//adds buttons to the buttonPanel
buttonPanel.add(runDemo);
buttonPanel.add(runLive);
buttonPanel.add(scan);
buttonPanel.add(findPatterns);
buttonPanel.add(cleanFolder);
buttonPanel.add(configureSettings);

//adds the console to the console panel
consolePanel.add(scrollBar);

//adds panels to the main panel
mainPanel.add(buttonPanel);
mainPanel.add(consolePanel);

//adds the main panel to the frame
this.add(mainPanel);

//packs the GUI
this.pack();

//sizes the GUI
this.setSize(600, 400);

//centers the GUI
this.setLocationRelativeTo(null);

//sets the GUI to be visible
this.setVisible(true);

}

public void run() {

}

public static void add(String string) {
console.append(string + newline);
}

}

这是将文本附加到控制台的方法:

public static void add(String string) {
console.append(string + newline);
}

这里是你真正要注意的部分(嗯,还是要注意append方法):

static JTextArea console;

下面是 add 方法的调用方式以及抛出 NullPointerException 的地方:

//main method start
public static void main(String[] args) throws InterruptedException, IOException, AWTException {

//opens up the GUI
(new Thread(new GUI())).start();

GUI.add("Text to add");

//possible methods
//ScanMarket.scanMarket(); //scans market for data
//FindPattern("Images"); //finds pattern among images in image folder labeled Images

}//end of main method

顺便说一下,我尝试改变

console.setEditable(false);

console.setEditable(true);

并且仍然抛出 NullPointerException。非常感谢您的帮助!

最佳答案

  1. 您的代码隐藏了控制台变量,因为您在构造函数中重新声明了它。不要这样做。
  2. 那个静态add(String...) 方法不应该是静态的。使其成为实例方法。

也就是说,你有

class Foo {
private Bar bar; // this guy is null

public Foo() {
Bar bar = new Bar(); // the class field is *still* null
// since this bar variable is local to the constructor only.
}
}

通过在构造函数中重新声明bar 变量,类中的实例字段保持为空。您不应该像这样在构造函数中重新声明变量:

class Foo {
private Bar bar; // class field is null here

public Foo() {
bar = new Bar(); // now no longer null. *** note the difference
}
}

事实上,除了主要方法和一两个支持方法之外,您在上面使用的方法或字段都不应该是静态的,仅此而已。

关于java - 如何将文本附加到另一个类的 JTextArea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com