i haben die beiden folgenden FunktionenJava Leinwand Zeichnung Sockel
public void mousePressed(MouseEvent e) {
x=e.getX();
y=e.getY();
PrintStream ps;
try {
ps = new PrintStream(sc.getOutputStream());
ps.println("!!##print"+" "+x+" "+" "+y+" "+x+" "+y);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public void mouseDragged(MouseEvent e) {
x1=e.getX();
y1=e.getY();
gr=canvas.getGraphics();
gr.drawLine(x, y, x1, y1);
if(x!=x1||y!=y1)
{
try {
PrintStream ps=new PrintStream(sc.getOutputStream());
ps.println("!!##print"+" "+x+" "+" "+y+" "+x1+" "+y1);
} catch (IOException e1) {
e1.printStackTrace();
}
}
x=x1;
y=y1;
}
Das Problem ist, wenn ich print verwenden, um die Punkte geht es in „Server-Handler“ zu schicken, wo ich sie in den console.I drucken sehen, dass Wenn ich mich schnell mit meiner Maus bewege, kann es nicht alle Punkte bekommen und die Punkte werden Leerzeichen enthalten, wenn ich sie in anderen Benutzerbereichen drucke. Wie kann ich alle Punkte bekommen, an denen meine Maus läuft, ohne sie zu verlieren? Was ist bei diesen Funktionen nicht gut? (Sc ist die Buchse an den Server) Hier ist der Teil, wo die Farbe Befehl in Server gehandhabt wird (Socke ist eine Arraylist von Steckdosen und sc ist die aktuelle Fassung)
Iterator<Socket> it=sock.iterator();
while(it.hasNext())
{
Socket vv=it.next();
if(vv!=sc)
{
ps=new PrintStream (vv.getOutputStream());
ps.println(ms);
}
}
Hier ist der Teil, wo die Nachricht analysiert wird, um zu sehen, welche Punkte übertragen wurden und sie zu zeichnen.Hier läuft alles schief, weil es nicht alle Nachrichten erhält, die vom Server übertragen wurden.Warum das passiert und wie kann ich es lösen ?
else if(mes.charAt(0)=='!'&&mes.charAt(1)=='!'&&mes.charAt(2)=='#'&&mes.charAt(3)=='#'&&
mes.charAt(4)=='p'&&mes.charAt(5)=='r'&&mes.charAt(6)=='i'&&mes.charAt(7)=='n'&&
mes.charAt(8)=='t'
)
{
StringTokenizer tok=new StringTokenizer(mes);
String aii=tok.nextToken();
ArrayList<Integer> numere=new ArrayList<Integer>();
for(int i=0;i<4;i++)
{
numere.add(Integer.parseInt(tok.nextToken()));
}
Graphics gs=canvas.getGraphics();
gs.drawLine(numere.get(0), numere.get(1), numere.get(2), numere.get(3));
}
Also nehme ich an, dass "sc" eine Socket-Verbindung zu einem Server ist? –
yes.sorry für das nicht zu sagen – User124235
und die Sache ist, dass auf meiner Leinwand ist es eine durchgehende Linie, wenn ich die Maustaste gedrückt und ziehen, aber wenn ich die Punkte in der Konsole übertrage ich sehe, dass es Punkte gibt, die fehlen – User124235