我正在尝试创建应该能够与许多客户端通信的多线程服务器。我在单独的线程中运行import matplotlib.pyplot as plt
import matplotlib.patches
from matplotlib.widgets import Slider
fig=plt.figure()
ax=fig.add_subplot(121, aspect="equal")
ax_x = plt.axes([0.58, 0.75, 0.33, 0.03], axisbg="w")
ax_y = plt.axes([0.58, 0.65, 0.33, 0.03], axisbg="w")
ax_w = plt.axes([0.58, 0.55, 0.33, 0.03], axisbg="w")
ax_h = plt.axes([0.58, 0.45, 0.33, 0.03], axisbg="w")
ax_a = plt.axes([0.58, 0.35, 0.33, 0.03], axisbg="w")
ax_t1 = plt.axes([0.58, 0.25, 0.33, 0.03], axisbg="w")
ax_t2 = plt.axes([0.58, 0.15, 0.33, 0.03], axisbg="w")
s_x = Slider(ax_x, 'x', -1, 1, valinit=0)
s_y = Slider(ax_y, 'y', -1, 1, valinit=0)
s_w = Slider(ax_w, 'width', 0, 2, valinit=0.5)
s_h = Slider(ax_h, 'height', 0, 2, valinit=0.5)
s_a = Slider(ax_a, 'angle', 0, 360, valinit=0)
s_t1 = Slider(ax_t1, 'theta1', 0, 360, valinit=0)
s_t2 = Slider(ax_t2, 'theta2', 0, 360, valinit=360)
arc = matplotlib.patches.Arc( (0,0), width=0.5, height=0.5, linewidth=4, color="#bd3270")
ax.add_patch(arc)
def update(val):
arc.center = (s_x.val, s_y.val)
arc.width = s_w.val
arc.height = s_h.val
arc.angle = s_a.val
arc.theta1 = s_t1.val
arc.theta2 = s_t2.val
## this is the line to add
arc._path = matplotlib.patches.Path.arc(s_t1.val , s_t2.val)
fig.canvas.draw_idle()
for s in [s_x,s_y, s_w, s_h, s_a, s_t1, s_t2]:
s.on_changed(update)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
plt.show()
,接受所有连接并将所有传入套接字打包在一个同步ServerSocket
中。这工作正常,我收到来自所有用户的消息。问题是发送消息。
我正在尝试使用来自单独类的一个静态方法ArrayList
,一旦命中发送按钮就会调用该方法,并且该方法遍历我sendMessage()
ArrayList
中的所有套接字并发送消息但没有任何事情发生在客户身上:
clientSockets
这是一个在新客户端连接时调用的Thread:
public static void sendMessage(){
String messageOut;
messageOut = Graphics.writeMessage.getText(); //getting text from TextArea
Graphics.writeMessage.setText(""); //clearing TextArea
stateChanged("Message sent: ".concat(messageOut)); //changing state in another state TextArea
clientSockets.stream().forEach((Socket socket) -> {
//if (socket.isConnected() == true){
try{
out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(messageOut);
out.flush();
} catch (IOException ex) {
Logger.getLogger(Pomocna.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
如果有人能让我知道为什么这不起作用以及如何改进它,我将不胜感激。另外,我不太清楚静态方法是否适合做这些事情。非常感谢,希望我能够以明确的方式制定问题。