我已经阅读了很多关于多线程客户端的内容但是对于这个,我不能让它多线程! 你能帮帮我吗?
public class MainClient implements Runnable{
private static InformationClass info = new InformationClass();
private static Socket c;
private static String text;
public static String getText() {
return text;
}
public static void setText(String text) {
MainClient.text = text;
}
private static PrintWriter os;
private static BufferedReader is;
static boolean closed = false;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
MainFrame farme = new MainFrame();
farme.setVisible(true);
try {
c = new Socket("localhost", 5050);
os = new PrintWriter(c.getOutputStream(), true);
is = new BufferedReader(new InputStreamReader(c.getInputStream()));
} catch (UnknownHostException ex) {
Logger.getLogger(MainClient.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(MainClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void active() {
String teXt = MainClient.getText();
System.out.println(teXt);
os.println(teXt);
try {
String line = is.readLine();
System.out.println("Text received: " + line);
os.flush();
is.close();
is.close();
c.close();
} catch (IOException ex) {
Logger.getLogger(MainClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
当客户端在文本区域写入内容然后单击发送按钮时,也会调用active方法。
2)我也有一个问题:
在另一个类中我为我的发送按钮执行了此操作,这是否意味着客户端是多线程的?
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
new Thread(new Runnable() {
@Override
public void run() {
// This gets run in a background thread
String text = jTextArea1.getText();
jTextArea2.append(client.getCurrentName() + " : " + text + "\n");
MainClient.setText(client.getCurrentName() + " : " + text + "\n");
clear();
MainClient.active();
}
}).start();
}
最后编辑:
这是我的主动方法:
public static void active() {
String teXt = MainClient.getText();
os.println(teXt);
String line = is.readLine();
System.out.println("Text received: " + line);
os.flush();
is.close();
is.close();
c.close();
}
答案 0 :(得分:0)
简答:是的。每次调用方法jButton1ActionPerformed时,第二个代码段中的代码都会创建一个新线程。
我不确定这是否是预期的行为。
答案 1 :(得分:0)
这是否意味着客户端是多线程的?
多线程是使用多个线程。从技术上讲,你是多线程的。
那么,我可以同时运行2个客户端吗?
简短回答,是的。
答案很长,你需要确保你的方法是线程安全的,MainCient
没有阻塞或被任何其他线程阻止。
当多线程时,我通常倾向于创建一个集中式类来控制线程的“池”。我称之为Dispatcher。它管理线程映射。