Java 调用函数或在子类中使用主类中的对象



我需要一些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);

如果ConsoleDebugMainClass类的子类,则需要使用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,你就会把事情做好。

相关内容

  • 没有找到相关文章

最新更新