我需要一些Java代码的帮助。我有Main类,其中定义了GUI中的所有对象,因此我创建了一个函数,用于将文本附加到Main类中的TextArea,现在我需要从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);
来自我的私有logWrite(String,String)函数。任何想法为什么这样做?谢谢!
答案 0 :(得分:1)
你说ConsoleDebug
是一个子类。也许你需要这样声明:
public class ConsoleDebug extends MainClass{
这样你可以从writeTextArea
调用ConsoleDebug
,因为它是主类的真正子类。
答案 1 :(得分:1)
如果extends关键字出现错误,请写下
public void writeTextArea(String string)
方法
public static void writeTextArea(String string)
{
jTextArea2.append(string);
}
并简单地以class_name.method名称访问该方法,即
Main.writeTextArea("[" + currentTimestamp() + "] " + prefix + newText + newline);
答案 2 :(得分:0)
如果ConsoleDebug
是MainClass
类的子类,则需要使用extend关键字。
在您的ConsoleDebug定义中写下:
public class ConsoleDebug extends MainClass {
...
}
可以在MainClass
类中使用ConsoleDebug
中的所有公共/受保护方法。
答案 3 :(得分:0)
有几种方法可以完成这项工作,一个简单的方法就是可以定义方法writeTextArea static。为此,您需要将jTextArea2定义为静态,并在新的ConsoleDebug之前初始化它。由于你没有给出完整的Main,我只能给你一个草稿:
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,你就可以完成任务。