gpt4 book ai didi

java - 将 JFrame 传递给新创建的类以从新类接收日志数据

转载 作者:行者123 更新时间:2023-12-01 11:57:49 24 4
gpt4 key购买 nike

我真的很难在谷歌上找到我正在特别寻找的东西,甚至在不知道任何特殊单词的情况下正确解释它,对不起。我正在开发我的第一个 SocketServer,并希望使用 GUI 来扩展它。我想尝试的第一步是为服务器 Activity 创建一个简单的日志窗口。我有一个 JFrame 并且可以向它传递文本。

public class Logger {

private JFrame frame;
private JTextArea tArea;
private JScrollPane jsp;
private StringBuilder sb = new StringBuilder();
File file = new File("C://");

public static void main(String[] args) {

String logTitle = new String(args[0]);

new Logger(logTitle);

}

public Logger(String logTitle) {

init(logTitle);

frame.setVisible(true);

//logToLogger(); // function to append logdata to textarea

}

public void logToLogger(String logText) {

tArea.append(logText.toString());

tArea.setCaretPosition(tArea.getDocument().getLength());

}

private void init(String logTitle) {

frame = new JFrame();

frame.setSize(400, 400);

frame.setTitle(logTitle);

frame.setLocationRelativeTo(null);

tArea = new JTextArea();

jsp = new JScrollPane(tArea);

frame.add(jsp, BorderLayout.CENTER);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

我还有一个用于启动服务器的主类。当启动主类时,应该启动一个记录器,然后我将它传递给一个新启动的线程。

我的主类

I WANT TO PASS THE LOGGER TO THE MYTHREAD CLASS ON THE LINE WHERE I WROTE THE INLINE COMMENT

import java.net.*;
import java.io.*;
import java.util.*;

public class Server {

public static void main(String[] args) {

Integer port = new Integer(args[0]);

String logTitle = new String(args[1]);

Logger log = new Logger(logTitle);

MyThread t = new MyThread(port, log); // thats the part i cant handle

log.logToLogger("Started on port " + port);

}

}

这是我如何启动一个线程

public class MyThread {

public static void main(int port, Logger log) {

log.logToLogger(port + "logged from MyThread");

}

}

最佳答案

看起来您还没有编写任何从套接字获取数据的内容。您只需要通过 Logger反对MyThread构造函数,并调用log.logToLogger(receivedText);来自MyThread .

您的代码应如下所示:

public class MyThread implements Runnable {

private Logger log;
private ServerSocket socket;
public MyThread(int port, Logger log) {
this.log = log;
log.logToLogger("SocketServer opened on port "+port);
try {
socket = new ServerSocket(port);
} catch (IOException e) {
log.logToLogger(e.getMessage());
}
}

@Override
public void run() {
while(true) {
Socket server;
try {
server = socket.accept();
log.logToLogger("Connection from"+server.getRemoteSocketAddress());
BufferedReader reader = new BufferedReader(new InputStreamReader(server.getInputStream()));
log.logToLogger("Received:"+reader.readLine());
server.close();
} catch (IOException e) {
log.logToLogger(e.getMessage());
}


}
}

}

public static void main(String[] args) {
Integer port = new Integer(args[0]);
String logTitle = new String(args[1]);
Logger log = new Logger(logTitle);
MyThread t = new MyThread(port, log);
(new Thread(t)).start();
}

套接字代码改编自此处:http://www.bogotobogo.com/Java/tutorial/tcp_socket_server_client.php

在 Windows 上的 cmd 提示符下,运行 telnet 127.0.0.1 1234并输入您的消息,它应该出现在 JFrame 中假设您在端口 1234 上运行应用程序。

您可能应该扩展 run()方法比仅仅关闭接收到的线路更强大。

关于java - 将 JFrame 传递给新创建的类以从新类接收日志数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291257/

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