Java 如何在没有类的情况下使用另一个类的方法
我有一个showMessage()方法,它将字符串附加到JTextArea上,我想在我的“类中的类”(ServerThread)中调用它。我如何才能做到这一点没有主要的;或Main=newmain()Java 如何在没有类的情况下使用另一个类的方法,java,class,methods,Java,Class,Methods,我有一个showMessage()方法,它将字符串附加到JTextArea上,我想在我的“类中的类”(ServerThread)中调用它。我如何才能做到这一点没有主要的;或Main=newmain() public类主框架{ 私有静态最终长serialVersionUID=1L; 私人区域聊天窗口; 私有列表端口=新的ArrayList(); public Main()引发IOException{ 超级(“服务器控制台”); chatWindow=新的JTextArea(); chatWindo
public类主框架{
私有静态最终长serialVersionUID=1L;
私人区域聊天窗口;
私有列表端口=新的ArrayList();
public Main()引发IOException{
超级(“服务器控制台”);
chatWindow=新的JTextArea();
chatWindow.setEditable(false);
JScrollPane scrollPane=新的JScrollPane(聊天窗口);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL\u SCROLLBAR\u ALWAYS);
滚动窗格.设置边界(0,20,596,200);
添加(滚动窗格);
setLayout(空);
设置大小(600300);
可设置大小(假);
setVisible(真);
getContentPane().setBackground(颜色为.white);
套接字s=null;
ServerSocket ss2=null;
showMessage(“服务器侦听…”\n);
试一试{
ss2=新服务器插座(3175);
}捕获(IOE异常){
e、 printStackTrace();
showMessage(“服务器错误”);
}
while(true){
试一试{
s=ss2.accept();
showMessage(“已建立连接”);
ports.add(s.getPort());
ServerThread st=新的ServerThread;
st.start();
}
捕获(例外e){
e、 printStackTrace();
showMessage(“连接错误”);
}
}
}
公共void showMessage(最终字符串m){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
附加(m);
}
});
}
}
类ServerThread扩展线程{
私有对象输出流输出;
私有对象输入流输入;
套接字s=null;
私有静态LinkedHashMap playerCoords=new LinkedHashMap();
公共服务器线程(套接字){
这个.s=s;
}
公开募捐{
}
}
示例:在run方法中,我希望有main.showMessage(string)之类的东西,而不需要声明main对象。只需将方法声明为
静态
publicstaticvoidshowmessage(最后一个字符串m)
这样,你可以这样称呼它-
Main.showMessage(“一些字符串”)代码>同时声明showMessage
方法和chatWindow
字段静态
。然后,您可以在需要的地方调用Main.showMessage(“任意”)
但是一个更优雅的解决方案将是将这两个singleton
s与listener
s进行通信
声明一个接口MessageListener
,方法是在message(stringmessage)
在ServerThread
中保存MessageListener
s的列表,并在run
方法中调用它们
class ServerThread extends Thread {
// class content
static List<MessageListener> messageListeners = new ArrayList<>();
public void run() {
for (MessageListener messageListener : messageListeners) {
messageListener.onMessage("the message");
}
}
}
就这些。然后整个代码看起来像:
import java.awt.Color;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
public class Main extends JFrame implements MessageListener {
private static final long serialVersionUID = 1L;
private JTextArea chatWindow;
private List<Integer> ports = new ArrayList<Integer>();
public Main() throws IOException {
super("ServerConsole");
ServerThread.messageListeners.add(this);
chatWindow = new JTextArea();
chatWindow.setEditable(false);
JScrollPane scrollPane = new JScrollPane(chatWindow);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setBounds(0, 20, 596, 200);
add(scrollPane);
setLayout(null);
setSize(600, 300);
setResizable(false);
setVisible(true);
getContentPane().setBackground(Color.white);
Socket s = null;
ServerSocket ss2 = null;
showMessage("Server Listening......\n");
try {
ss2 = new ServerSocket(3175);
} catch (IOException e) {
e.printStackTrace();
showMessage("Server error");
}
while (true) {
try {
s = ss2.accept();
showMessage("connection Established\n");
ports.add(s.getPort());
ServerThread st = new ServerThread(s);
st.start();
}
catch (Exception e) {
e.printStackTrace();
showMessage("Connection Error");
}
}
}
public void showMessage(final String m) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
chatWindow.append(m);
}
});
}
@Override
public void onMessage(String message) {
showMessage(message);
}
}
interface MessageListener {
public void onMessage(String message);
}
class ServerThread extends Thread {
private ObjectOutputStream output;
private ObjectInputStream input;
Socket s = null;
private static LinkedHashMap<Integer, String> playerCoords = new LinkedHashMap<Integer, String>();
static List<MessageListener> messageListeners = new ArrayList<>();
public ServerThread(Socket s) {
this.s = s;
}
public void run() {
for (MessageListener messageListener : messageListeners) {
messageListener.onMessage("the message");
}
}
}
导入java.awt.Color;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.util.ArrayList;
导入java.util.LinkedHashMap;
导入java.util.List;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.ScrollPaneConstants;
导入javax.swing.SwingUtilities;
公共类Main扩展JFrame实现MessageListener{
私有静态最终长serialVersionUID=1L;
私人区域聊天窗口;
私有列表端口=新的ArrayList();
public Main()引发IOException{
超级(“服务器控制台”);
ServerThread.messageListeners.add(此);
chatWindow=新的JTextArea();
chatWindow.setEditable(false);
JScrollPane scrollPane=新的JScrollPane(聊天窗口);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL\u SCROLLBAR\u ALWAYS);
滚动窗格.设置边界(0,20,596,200);
添加(滚动窗格);
setLayout(空);
设置大小(600300);
可设置大小(假);
setVisible(真);
getContentPane().setBackground(颜色为.white);
套接字s=null;
ServerSocket ss2=null;
showMessage(“服务器侦听…”\n);
试一试{
ss2=新服务器插座(3175);
}捕获(IOE异常){
e、 printStackTrace();
showMessage(“服务器错误”);
}
while(true){
试一试{
s=ss2.accept();
showMessage(“已建立连接”);
ports.add(s.getPort());
ServerThread st=新的ServerThread;
st.start();
}
捕获(例外e){
e、 printStackTrace();
showMessage(“连接错误”);
}
}
}
公共void showMessage(最终字符串m){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
附加(m);
}
});
}
@凌驾
公共消息无效(字符串消息){
showMessage(消息);
}
}
接口消息侦听器{
公共消息无效(字符串消息);
}
类ServerThread扩展线程{
私有对象输出流输出;
私有对象输入流输入;
套接字s=null;
私有静态LinkedHashMap playerCoords=new LinkedHashMap();
静态列表messageListeners=new ArrayList();
公共服务器线程(套接字){
这个.s=s;
}
公开募捐{
for(MessageListener MessageListener:messageListeners){
onMessage(“消息”);
}
}
}
创建showMessage
方法和chatWindow
字段静态
。然后你可以打电话到Main.showMessage(“随便”)
Wow-man谢谢你的回答!我要试试看。好的是我只是研究了接口
class ServerThread extends Thread {
// class content
static List<MessageListener> messageListeners = new ArrayList<>();
public void run() {
for (MessageListener messageListener : messageListeners) {
messageListener.onMessage("the message");
}
}
}
public class Main extends JFrame implements MessageListener {
// class content
public Main() throws IOException {
super("ServerConsole");
ServerThread.messageListeners.add(this);
// other content
}
// class content
@Override
public void onMessage(String message) {
showMessage(message);
}
}
import java.awt.Color;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
public class Main extends JFrame implements MessageListener {
private static final long serialVersionUID = 1L;
private JTextArea chatWindow;
private List<Integer> ports = new ArrayList<Integer>();
public Main() throws IOException {
super("ServerConsole");
ServerThread.messageListeners.add(this);
chatWindow = new JTextArea();
chatWindow.setEditable(false);
JScrollPane scrollPane = new JScrollPane(chatWindow);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setBounds(0, 20, 596, 200);
add(scrollPane);
setLayout(null);
setSize(600, 300);
setResizable(false);
setVisible(true);
getContentPane().setBackground(Color.white);
Socket s = null;
ServerSocket ss2 = null;
showMessage("Server Listening......\n");
try {
ss2 = new ServerSocket(3175);
} catch (IOException e) {
e.printStackTrace();
showMessage("Server error");
}
while (true) {
try {
s = ss2.accept();
showMessage("connection Established\n");
ports.add(s.getPort());
ServerThread st = new ServerThread(s);
st.start();
}
catch (Exception e) {
e.printStackTrace();
showMessage("Connection Error");
}
}
}
public void showMessage(final String m) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
chatWindow.append(m);
}
});
}
@Override
public void onMessage(String message) {
showMessage(message);
}
}
interface MessageListener {
public void onMessage(String message);
}
class ServerThread extends Thread {
private ObjectOutputStream output;
private ObjectInputStream input;
Socket s = null;
private static LinkedHashMap<Integer, String> playerCoords = new LinkedHashMap<Integer, String>();
static List<MessageListener> messageListeners = new ArrayList<>();
public ServerThread(Socket s) {
this.s = s;
}
public void run() {
for (MessageListener messageListener : messageListeners) {
messageListener.onMessage("the message");
}
}
}