我需要一些Java代码的帮助。我有 Main 类,其中定义了 GUI 中的所有对象,所以我创建了一个函数,用于将文本附加到主类中的文本区域,现在我需要从 Sub 类调用该函数以将文本附加到文本区域。
主类:
public static String newline = System.getProperty("line.separator");
ConsoleDebug debug = new ConsoleDebug();
public void writeTextArea(String string) {
jTextArea2.append(string);
}
子类:
package AppPackage;
import static AppPackage.MainGUI.newline;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.Calendar;
//Debuging console
public class ConsoleDebug {
public java.sql.Timestamp currentTimestamp() {
Calendar calendar = Calendar.getInstance();
java.sql.Timestamp timestamp = new java.sql.Timestamp(calendar.getTime().getTime());
return timestamp;
}
//Message
public void message(String newText) {
logWrite("",newText);
}
//Info message
public void info(String newText) {
logWrite("|INFO| ",newText);
}
//Error message
public void error(String newText) {
logWrite("|ERROR| ",newText);
}
//Critical message
public void critical(String newText) {
logWrite("|CRITICAL| ",newText);
}
//Write to log
private void logWrite(String prefix, String newText) {
writeTextArea("[" + currentTimestamp() + "] " + prefix + newText + newline);
File launcherLog = new File("launcher.log");
if(!launcherLog.exists() || launcherLog.isDirectory()) {
// Stream to write file
FileOutputStream fout;
try
{
// Open an output stream
fout = new FileOutputStream("launcher.log");
// Print a line of text
PrintStream stream = new PrintStream(fout);
stream.println("[" + currentTimestamp() + "] " + prefix + newText);
// Close our output stream
fout.close();
}
// Catches any error conditions
catch (IOException e)
{
System.err.println("Unable to create log file");
}
}
else {
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("launcher.log", true)));
out.println("[" + currentTimestamp() + "] " + prefix + newText);
out.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
System.err.println("Unable to edit log file");
}
}
}
}
我认为看起来不错,但是错误
"Can't find symbol writeTextArea(String)"
当我尝试时出现
writeTextArea("[" + currentTimestamp() + "] " + prefix + newText + newline);
从我的私人日志写入(字符串,字符串)函数。知道为什么这样做吗?谢谢!
你说ConsoleDebug
是一个子类。也许您需要这样声明:
public class ConsoleDebug extends MainClass{
这样,您可以从ConsoleDebug
调用writeTextArea
,因为它是主类的真正子类。
如果扩展关键字给出错误,则编写您的
public void writeTextArea(String string)
方法为
public static void writeTextArea(String string)
{
jTextArea2.append(string);
}
并简单地将该方法作为class_name.方法名称访问,即
Main.writeTextArea("[" + currentTimestamp() + "] " + prefix + newText + newline);
如果ConsoleDebug
是MainClass
类的子类,则需要使用extend关键字。
在 ConsoleDebug 定义中写下以下内容:
public class ConsoleDebug extends MainClass {
...
}
比MainClass
中的所有公共/受保护方法都可以在类ConsoleDebug
内使用。
有几种方法可以完成这项工作,一个简单的方法是您可以定义方法writeTextArea static。为了做到这一点,你也需要将jTextArea2定义为静态的,并在你新的ConsoleDebug之前初始化它。既然你没有给出完整的主图,我只能给你一个草稿:
public class Main {
static JTextArea jTextArea2;
public static void main() {
jTextArea2 = ...;
ConsoleDebug debug = new ConsoleDebug();
....
}
public static void writeTextArea(String string) {
jTextArea2.append(string);
}
}
然后你可以在你的子类中将writeTextArea更改为Main.writeTextArea,你就会把事情做好。