Name: tb29552 Date: 06/18/97
Compiling the given source code hangs the compiler (no output,
no nothing!). Will stay hung for hours.
Additional classes can be provided upon request.
---8<---
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
class DiagramComponent extends Canvas implements Serializable
{
Vector views;
boolean tracking, sized;
int dX, dY, cViews;
FontMetrics fm;
ClasView selected;
public DiagramComponent()
{
views = new Vector();
tracking = false;
selected = null;
sized = false;
cViews = 1;
addMouseListener( new MouseAdapter() {
public void mousePressed( MouseEvent e ) {
int x = e.getX();
int y = e.getY();
boolean foundOne = false;
for ( int i = views.size() - 1; i >= 0; i-- ) {
ClasView cv = (ClasView) views.elementAt(i);
if ( cv.contains( x, y ) ) {
select( cv );
foundOne = true;
break;
}
}
if ( !foundOne ) {
if ( selected != null ) unselect( selected );
}
else {
tracking = true;
dX = selected.x - x;
dY = selected.y - y;
repaint( selected.x, selected.y, selected.width, selected.height );
}
}
public void mouseReleased( MouseEvent e ) {
if ( tracking ) {
tracking = false;
}
}
} );
addMouseMotionListener( new MouseMotionAdapter() {
public void mouseDragged( MouseEvent e ) {
int x = e.getX();
int y = e.getY();
if ( tracking && selected != null ) {
Rectangle old = selected.bounds();
Rectangle vGap, hGap;
selected.setLocation( x + dX, y + dY );
Graphics g = getGraphics( );
g.copyArea( old.x, old.y, old.width, old.height, (selected.x - old.x),
( selected.y - old.y ) );
g.dispose();
vGap = new Rectangle( );
vGap.x = ( selected.x < old.x ) ? selected.x + selected.width : old.x;
vGap.y = ( selected.y < old.y ) ? selected.y : old.y;
vGap.width = Math.abs( selected.x - old.x );
vGap.height = Math.abs( selected.y - old.y ) + selected.height;
hGap = new Rectangle( );
hGap.x = ( selected.x < old.x ) ? selected.x : old.x;
hGap.y = ( selected.y < old.y ) ? selected.y + selected.height : old.y;
hGap.width = selected.width;
hGap.height = Math.abs( selected.y - old.y );
repaint( vGap.x, vGap.y, vGap.width, vGap.height );
repaint( hGap.x, hGap.y, hGap.width, hGap.height );
}
}
} );
}
public void addNewClas( String newName )
{
Clas theClas = new Clas( newName );
ClasView cv = new ClasView( theClas );
views.addElement( cv );
if ( sized )
{
cv.resize( cv.size( fm ) );
Dimension sz = getSize();
Dimension vsz = cv.size();
cv.setLocation( ( sz.width - vsz.width ) / 2, ( sz.height - vsz.height ) / 2 );
repaint( cv.x, cv.y, cv.width, cv.height );
}
select( cv );
}
public void addNewClas( )
{
addNewClas( "Class" + cViews++ );
}
public void delete( )
{
if ( selected != null )
{
ClasView cv = selected;
unselect( cv );
views.removeElement( cv );
repaint( cv.x, cv.y, cv.width, cv.height );
}
}
public void paint( Graphics g )
{
if ( !sized )
{
getSizes( g );
sized = true;
}
Rectangle clip = g.getClipBounds();
for ( int i = 0; i < views.size(); i++ )
{
ClasView cv = (ClasView) views.elementAt( i );
if ( cv.intersects( clip ) )
{
g.translate( cv.x, cv.y );
cv.paint( g );
g.translate( -cv.x, -cv.y );
}
}
}
private void getSizes( Graphics g )
{
fm = g.getFontMetrics();
for ( Enumeration e = views.elements(); e.hasMoreElements(); )
{
ClasView cv = (ClasView) e.nextElement();
cv.resize( cv.size( fm ) );
}
}
private void select( ClasView cv )
{
if ( selected != null ) unselect( selected );
selected = cv;
views.removeElement( cv );
views.addElement( cv );
cv.selected = true;
}
private void unselect( ClasView cv )
{
cv.selected = false;
selected = null;
repaint( cv.x, cv.y, cv.width, cv.height );
}
}
company - End of the Continent Software, Inc. , email - ###@###.###
======================================================================
- duplicates
-
JDK-4051281 Problem compiling when inner class references a private method
-
- Closed
-
- relates to
-
JDK-4059604 javac hangs
-
- Closed
-
-
JDK-4059545 javac hangs with inner class code
-
- Closed
-
-
JDK-4059555 javac hangs when compiling file
-
- Closed
-