mein problem ist schwer zu beschreiben :
eine java-anwendung (JDK 1.6.0_26,Win7,2 GB RAM) zeichnet Messlinien
mit dem Kontext Graphics2D. Das Zeichnen geht recht schnelle, aber wenn man dann
z.B. einen JFRame als modales Fenster zur Filterung von Daten aufruft, wird zwar der Rahmen gezeichnet, aber zunächst nicht dessen Inhalt. Der Rahmen läßt sich verschieben und nimm dann
den Inhalt des dahinterliegenden Ausschnitts mit.
Erst nach ner Minute kommt evtl. der gewollte Rahmeninhalt,wenn überhaupt;manchmal hängt sich das
Programm auch auf, es tut sich nix mehr.
Da ist jede menge code, was soll ich hier ggf. zeigen ?
mal die grafik ausgabe zum Zeichnen des Istwertgraphen und der Sollwertgraphen:
zeichnet ja schön,aber irgendwie scheint was mit dem laufzeitspeicher nicht richtig zu laufen..
wo kann ich zur problemlösung ansetzen ?
eine java-anwendung (JDK 1.6.0_26,Win7,2 GB RAM) zeichnet Messlinien
mit dem Kontext Graphics2D. Das Zeichnen geht recht schnelle, aber wenn man dann
z.B. einen JFRame als modales Fenster zur Filterung von Daten aufruft, wird zwar der Rahmen gezeichnet, aber zunächst nicht dessen Inhalt. Der Rahmen läßt sich verschieben und nimm dann
den Inhalt des dahinterliegenden Ausschnitts mit.
Erst nach ner Minute kommt evtl. der gewollte Rahmeninhalt,wenn überhaupt;manchmal hängt sich das
Programm auch auf, es tut sich nix mehr.
Da ist jede menge code, was soll ich hier ggf. zeigen ?
mal die grafik ausgabe zum Zeichnen des Istwertgraphen und der Sollwertgraphen:
Java:
private static void zeichneIstwertLinie(Graphics2D g2d,
int i_raster_x_modulo,double ampl_ratio,int start_idx,double mittel_soll)
{
int i = 0;
int iLast_x = NULLPUNKT_x,iLast_x_hk=NULLPUNKT_x;
double[] dLast_y = { 0.0,0.0,0.0,0.0 };
int anzahl_werte = grfmng.mpoints.size();
int max_y_val2show = NULLPUNKT_y + MAX_VALUE_AMPLITUDE * 2; // - 50;
int x_wert = 0;
Double dXwertGraph = 0.0;
String y_buf = "";
Double y_wert_d = 0.0;//zoom_bedarf=0.0;
int y_wert_i = 0;
Vector vRecord = new Vector(1);
int[] fieldpos = {1,5,6,7 };
int fp = 0;
Color[] farben = {Color.RED,Color.BLUE,Color.BLUE,Color.MAGENTA };
for(i = start_idx;i < anzahl_werte;i++)
{
dXwertGraph = (i-start_idx) * scale_x + NULLPUNKT_x;
x_wert = (int) Math.round(dXwertGraph);
//- senkrechte Linien fuer Eingange **************************
//if(scale_x > 1 || (i % i_raster_x_modulo) == 0)
if((i % i_raster_x_modulo ) == 0)
{
g2d.setColor(Color.DARK_GRAY);
g2d.setStroke(bstrk_pkt);
g2d.drawLine(x_wert, 50, x_wert,max_y_val2show+50);
}
//y_buf = String.valueOf(grfmng.mpoints.get(i));
vRecord = (Vector) grfmng.mpoints.get(i);
//System.out.println("gdwg zeichneIstwertLinie recno : "+i+" record : "+vRecord.toString());
for(fp=0;fp < fieldpos.length;fp++)
{
y_buf = String.valueOf(vRecord.get(fp));
y_buf = y_buf.substring(0, y_buf.length()-1);
//System.out.println("gdwg zeichneIstwertLinie fp : "+fp+" y_buf(String) : "+y_buf);
//- wenn Umwandlung wegen "schlechter" Daten nicht klappt, weiter durchgehen..
try
{
y_wert_d = Double.parseDouble(y_buf);
y_wert_d = MITTELLINIE_y - (y_wert_d - mittel_soll ) * ampl_ratio;
y_wert_d += grfmng.y_zero_value; //- Nullpunktverschiebung durch Schieberegler
y_wert_i = y_wert_d.shortValue();
//System.out.println("paint_values y_wert_i : "+y_wert_i);
}
catch (Exception e)
{
System.out.println("gdrwg paint_values ERROR y_buf(String) : "+y_buf+" y_wert_d : "+y_wert_d+" y-Wert-i : "+y_wert_i);
break;
}
//System.out.println("paint_values y_buf : "+y_buf+" y_wert_d : "+y_wert_d+" y-Wert-i : "+y_wert_i);
if( y_wert_d > NULLPUNKT_y && y_wert_d < max_y_val2show)
{
g2d.setColor(farben[fp]);
if(fp == 0)
g2d.setStroke(bstrk_l); //- Istwerte breit 4,rot
else
g2d.setStroke(bstrk1); //-Sollwerte schmal 2
if(fp < 1) //- nur bei Messlinie zusaetzlich Kaestchen erzeugen !
g2d.fillRect(x_wert, y_wert_i+NULLPUNKT_y, 3, 4);
//- Punkte verbinden -----------
if(i > start_idx )
{
g2d.drawLine( iLast_x, (int) dLast_y[fp]+NULLPUNKT_y, x_wert,((int) y_wert_d.shortValue())+NULLPUNKT_y );
}
}
dLast_y[fp] = y_wert_d;
}
g2d.setColor(Color.BLACK);
//if(scale_x > 1 || (i % 200) == 0)
if( (i % i_raster_x_modulo) == 0)
{
//- X-Werte schraeg darstellen wg. Platzmangel
g2d.rotate( Math.PI/4 ,(int) x_wert+3,max_y_val2show + 40);//45
g2d.drawString((String) grfmng.mp_tx.get(i),(int) x_wert+3,max_y_val2show + 45);
g2d.rotate( - Math.PI/4 ,(int) x_wert+3,max_y_val2show + 40);//45
}
iLast_x = x_wert;
}
}
zeichnet ja schön,aber irgendwie scheint was mit dem laufzeitspeicher nicht richtig zu laufen..
wo kann ich zur problemlösung ansetzen ?