У меня есть многопользовательская чат-комната с общим приложением для досок, где я использовал Jpanel для рисования в конкретном клиенте, а затем передавал по серверу другим клиентам (через Java Socket Programming). Моя проблема в том, что я хотел сделать функцию рисования в режиме реального времени, как только, когда рисунок будет выполнен на JPanel одного клиента, он должен быть виден другим клиентам. Я написал функцию на mouseReleased событии JPanel, но она видна другим клиентам только после того, как событие mouseReleased будет запущено на JPanel этого клиента. Может ли кто-нибудь предложить что-то, с помощью которого я могу сделать действие лучше (в режиме реального времени)?Опираясь на JPanel и передавайте его нескольким клиенту
@Override
public void mouseReleased(MouseEvent e) {
lineObject = new LineMessage();
lineObject.setImageMessage(DrawPanel.linelist);
ChatApplication_Client.Action_Paint(lineObject);
}
ChatApplication_Client.java
public void run(){
System.out.println("Listening for messages from server . . . ");
try{
while(!receivingdone){
object = myInputStream.readObject();
if(object instanceof LineMessage)
{
lineObject = (LineMessage) object;
WhiteBoardMessageReceive(lineObject);
}
}
}
// Этот метод отвечает за малярные и вещания на конец клиента
private void WhiteBoardMessageReceive(LineMessage lineObject)
{
ArrayList<Line> linelist = (ArrayList)
lineObject.getImageMessage();
ChatClient_GUI.TA_ChatWindow.append(lineObject.Name+": "
+lineObject.Text + "\n" + "At ["
+DateUtils.now()+ "] " + "\n");
drawPanel.drawit(linelist);
}
// Этот метод вызывается из графического интерфейса on mouseReleased event
public static void Action_Paint(LineMessage lineObject)
{
try
{
myOutputStream.reset();
myOutputStream.writeObject(lineObject);
myOutputStream.flush();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
LineMessage.java
class LineMessage implements Serializable
{
ArrayList<Line> message;
Line line = new Line();
String Name =line.getName() ;
String Text ;
public void setImageMessage(Object message) {
this.message = (ArrayList) message;
}
public Object getImageMessage() {
return message;
}
}
class Line extends ChatMessage implements Serializable {
int startx, starty, endx, endy;
public Line() {
}
public Line(int sx, int sy, int ex, int ey)
{
setStartX(sx);
setStartY(sy);
setEndX(ex);
setEndY(ey);
}
public void setStartX(int sx) {
startx = sx;
}
public void setStartY(int sy) {
starty = sy;
}
public void setEndX(int ex) {
endx = ex;
}
public void setEndY(int ey) {
endy = ey;
}
public int getStartX() {
return startx;
}
public int getStartY() {
return starty;
}
public int getEndX() {
return endx;
}
public int getEndY() {
return endy;
}
}
Мы собираемся нужно больше кода, чем это. Особенно полезен класс 'ChatApplication_Client', также класс' LineMessage'. –
MouseMotionListener.mouseDragged – ControlAltDel
Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –