Java 如何使textArea对象可访问

Java 如何使textArea对象可访问,java,swing,Java,Swing,我已经编写了大约3个月了,(我从来没有任何编程经验),我遇到了一点问题。我正在做一个空闲的点击游戏,但我似乎无法访问textArea 我需要从类外更新textArea,因为我是多线程的,需要单独的run()方法 class AddOne扩展线程{ 公共静态整数货币=0; 公共静态布尔标志=false; 公开募捐{ 试一试{ 货币++; 系统输出打印(货币); //用新的货币值更新textArea } 捕获(例外e){ System.out.println(“例外情况为:“+e”); } } }

我已经编写了大约3个月了,(我从来没有任何编程经验),我遇到了一点问题。我正在做一个空闲的点击游戏,但我似乎无法访问
textArea

我需要从类外更新
textArea
,因为我是多线程的,需要单独的
run()
方法

class AddOne扩展线程{
公共静态整数货币=0;
公共静态布尔标志=false;
公开募捐{
试一试{
货币++;
系统输出打印(货币);
//用新的货币值更新textArea
}
捕获(例外e){
System.out.println(“例外情况为:“+e”);
}
}
}
类AddOnePerSec扩展线程{
公开募捐{
试一试{
if(AddOne.flag==false)
{   

对于(int i=0;i好吧,我添加了代码,让它实现了您想要的功能。在我看来,这不是最好的方法,只是我所说的快速而肮脏的解决方案。如果您还没有这样做,我建议您阅读本教程

我只是在类
AddOne
AddOnePerSec
中添加了一个成员变量。我还为每个初始化成员变量的类添加了一个构造函数。这样,您就可以从类中引用
JTextArea

导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JTextArea;
类AddOne扩展线程{
私人JTEXTEXTAREA textArea;
公共静态整数货币=0;
公共静态布尔标志=false;
公共地址(JTextArea-txtAr){
textArea=txtAr;
}
公开募捐{
试一试{
货币++;
系统输出打印(货币);
//用新的货币值更新textArea
//注意:必须在EDT上更新GUI。
EventQueue.invokeLater(()->textArea.append(String.valueOf(money)+“\n”);
}
捕获(例外e){
System.out.println(“例外情况为:“+e”);
}
}
}
类AddOnePerSec扩展线程{
私人JTEXTEXTAREA textArea;
公共AddOnePerSec(JTextArea-txtAr){
textArea=txtAr;
}
公开募捐{
试一试{
if(AddOne.flag==false)
{   
for(int i=0;i textArea.append(String.valueOf(AddOne.money)+“\n”);
}
AddOne.flag=false;
}
else{System.out.println(“请稍候…”);}
}
捕获(例外e){
System.out.println(“例外情况为:“+e”);
}
}
}
公共类点击游戏{
私有静态JFrame;
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
AddOne.flag=false;
ClickGame窗口=新建ClickGame();
单击game.frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建应用程序。
*/
公众点击游戏(){
初始化();
}
/**
*初始化框架的内容。
*/
公共静态void initialize(){
frame=新的JFrame();
机架立根(100450300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(新的BorderLayout(0,0));
最终JTextArea textArea=新的JTextArea(110,80);
JButton btnAdd=新JButton(“添加1”);
添加ActionListener(新的ActionListener(){
已执行的公共无效操作(操作事件e){
AddOne add=新的AddOne(textArea);
add.start();
}
});
frame.getContentPane().add(btnAdd,BorderLayout.WEST);
JButton btnAddEvery=新JButton(“每秒添加1个,持续100秒”);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
AddOnePerSec-persec=新的AddOnePerSec(textArea);
persec.start();
}
});
frame.getContentPane().add(btnAddEvery,BorderLayout.EAST);
frame.getContentPane().add(textArea,BorderLayout.CENTER);
}
}
下面是running应用程序的屏幕截图


我使用了windowbuilder for eclipse。大部分代码都是自动生成的。我要求您使用getter方法访问此文本区域。必须查找哪些内容……可以肯定地说,我跳过了学习Java的几个步骤(1)请对代码和代码片段、HTML/XML或输入/输出等结构化文档使用代码格式。为此,请选择文本并单击邮件发布/编辑表单顶部的
{}
按钮。2)
JTextArea textArea=new JTextArea()
建议这样的行和列的大小
JTextArea textArea=newjtextarea(4,20);
3)
frame.setBounds(100100450300);
该大小只是一个猜测。相反
pack()
添加组件后。谢谢,我最后做的只是将所有线程移动到一个类中,以便它们可以访问对象。