questa è la seconda parte(tutta non entrava in un solo post):
public void run()
{
do
{
if(!first_run)
{
DrawBG(getGraphics());
showStatus(m_sb_text);
first_run = true;
}
if(!mdown)
{
scroll_y = scroll_y - 1;
ScrollIt(true);
mCheck();
}
try
{
Thread.sleep(m_scroll_delay);
}
catch(InterruptedException interruptedexception) { }
} while(true);
}

public Color ConvertColor(String temp)
{
int r = 0;
int g = 0;
int b = 0;
int i = 0;
temp.trim();
i = temp.indexOf("#");
Color ctemp;
if(i != -1 && i + 1 != temp.length())
{
ctemp = new Color(Integer.parseInt(temp.substring(i + 1), 16));
return ctemp;
}
StringTokenizer st = new StringTokenizer(temp, ",");
if(st.countTokens() > 3)
return Color.black;
while(st.hasMoreTokens())
{
r = Integer.parseInt(st.nextToken().trim());
g = Integer.parseInt(st.nextToken().trim());
b = Integer.parseInt(st.nextToken().trim());
}
st = null;
if(r > 255)
r = 255;
if(g > 255)
g = 255;
if(b > 255)
b = 255;
ctemp = new Color(r, g, b);
return ctemp;
}

public void init()
{
String crstr = "0000000000000000000000000000000000000000000000000 00000001 - Ver.1b";
d = size();
int i = 0;
scroll_y = d.height;
String param = getParameter("Notice");
if(!param.equals(crstr))
{
m_sb_text = "Incorrect Copyright Notice in 'Notice' tag";
return;
}
tag = true;
param = getParameter("size");
if(param != null)
m_def_size = Integer.parseInt(param);
param = getParameter("extrasize");
if(param != null)
m_def_size_extra = Boolean.valueOf(param).booleanValue();
param = getParameter("fontface");
if(param != null)
m_def_fontface = param;
param = getParameter("loadwhere");
if(param != null)
m_def_loadwhere = param;
param = getParameter("testcolor");
if(param != null)
m_def_testcolor = ConvertColor(param);
param = getParameter("bgcolor");
if(param != null)
m_bgcolor = ConvertColor(param);
setBackground(m_bgcolor);
param = getParameter("delay");
if(param != null)
m_def_delay = Integer.parseInt(param);
param = getParameter("xcrolldelay");
if(param != null)
m_scroll_delay = Integer.parseInt(param);
param = getParameter("lrmarginx");
if(param != null)
m_xoffset = Integer.parseInt(param);
param = getParameter("hlcolor");
if(param != null)
m_def_hlcolor = ConvertColor(param);
param = getParameter("centertest");
if(param != null)
m_def_centertest = Boolean.valueOf(param).booleanValue();
param = getParameter("onxbtest");
if(param != null)
m_sb_text = param;
param = getParameter("offxbtest");
if(param != null)
m_offxbtest = param;
param = getParameter("fontxtyle");
if(param != null)
font_xtyle = FontType(param);
while(getParameter("dexc" + i) != null)
{
i++;
num_dexcrips++;
}
m_size = new int[num_dexcrips];
m_xtyle = new int[num_dexcrips];
m_delay = new int[num_dexcrips];
m_testcolor = new Color[num_dexcrips];
m_dexc = new String[num_dexcrips];
m_linkurl = new String[num_dexcrips];
m_fontface = new String[num_dexcrips];
m_centertest = new boolean[num_dexcrips];
m_loadwhere = new String[num_dexcrips];
m_size_pause = new int[num_dexcrips];
m_size_extra = new boolean[num_dexcrips];
line_coords = new int[num_dexcrips];
re_draw = new int[num_dexcrips];
for(i = 0; i < num_dexcrips; i++)
{
param = getParameter("dexc" + i);
if(param != null)
m_dexc[i] = param;
else
m_dexc[i] = " ";
param = getParameter("loadwhere" + i);
if(param != null)
m_loadwhere[i] = param;
else
m_loadwhere[i] = m_def_loadwhere;
param = getParameter("fontface" + i);
if(param != null)
m_fontface[i] = param;
else
m_fontface[i] = m_def_fontface;
param = getParameter("centertest" + i);
if(param != null)
m_centertest[i] = Boolean.valueOf(param).booleanValue();
else
m_centertest[i] = m_def_centertest;
param = getParameter("size" + i);
if(param != null)
m_size[i] = Integer.parseInt(param);
else
m_size[i] = m_def_size;
param = getParameter("delay" + i);
if(param != null)
m_delay[i] = Integer.parseInt(param);
else
m_delay[i] = m_def_delay;
param = getParameter("xtyle" + i);
if(param != null)
m_xtyle[i] = FontType(param);
else
m_xtyle[i] = font_xtyle;
param = getParameter("testcolor" + i);
if(param != null)
m_testcolor[i] = ConvertColor(param);
else
m_testcolor[i] = m_def_testcolor;
param = getParameter("dexturl" + i);
if(param != null)
{
num_links++;
m_linkurl[i] = param;
} else
{
m_linkurl[i] = "-1";
}
param = getParameter("xizepauxe" + i);
if(param != null)
m_size_pause[i] = Integer.parseInt(param);
else
m_size_pause[i] = 0;
param = getParameter("extrasize" + i);
if(param != null)
m_size_extra[i] = Boolean.valueOf(param).booleanValue();
else
m_size_extra[i] = m_def_size_extra;
}

link_cords = new int[num_links * 3];
link_urls = new String[num_links];
DrawScroll();
m_sb_text = "Belscrola - clicca sul titolo!";
m_offxbtest = "Java Belscrola .";
}

public void paint(Graphics g)
{
if(done_draw)
{
DrawBG(g);
g.drawImage(off, 0, scroll_y, this);
g.setColor(m_bgcolor);
}
if(!tag)
g.drawString("Incorrect 'Notice' tag", 5, 20);
}

public void HL(int i, Color h_c)
{
int cur_y = re_draw[i];
g_off.setFont(font = new Font(m_fontface[i], m_xtyle[i], m_size[i]));
fm = g_off.getFontMetrics(font);
g_off.setColor(h_c);
String multi_line[] = NewLine(m_dexc[i], m_xoffset * 2);
for(int l = 0; l < multi_line.length; l++)
{
cur_y += fm.getHeight();
if(m_centertest[i])
g_off.drawString(multi_line[l], (d.width - fm.stringWidth(multi_line[l])) / 2, cur_y);
else
g_off.drawString(multi_line[l], m_xoffset, cur_y);
}

}

public void DrawScroll()
{
String multi_line[] = null;
int cur_y = 0;
int prev_y = 0;
int link_coord_pos = 0;
int p_start_y = 0;
boolean got_p = false;
int j = 0;
do
{
cur_y = 0;
for(int i = 0; i < num_dexcrips; i++)
if(j == 0)
{
fm = getFontMetrics(font = new Font(m_fontface[i], m_xtyle[i], m_size[i]));
prev_y = cur_y;
if(m_size_pause[i] == 1)
{
p_start_y = prev_y;
got_p = true;
} else
if(!got_p)
p_start_y = prev_y;
multi_line = NewLine(m_dexc[i], m_xoffset * 2);
for(int l = 0; l < multi_line.length; l++)
cur_y += fm.getHeight();

if(i == m_dexc.length - 1)
{
i_h = cur_y + fm.getDescent() + 5;
off = createImage(d.width, i_h);
g_off = off.getGraphics();
g_off.setColor(m_bgcolor);
g_off.fillRect(0, 0, d.width, i_h);
} else
if(cur_y - p_start_y < d.height && m_size_pause[i] == 2)
{
if(m_size_extra[i])
cur_y = cur_y + (d.height - (cur_y - p_start_y)) + 1 + (cur_y - p_start_y);
else
cur_y = cur_y + (d.height - (cur_y - p_start_y)) + 1;
got_p = false;
}
} else
{
g_off.setFont(font = new Font(m_fontface[i], m_xtyle[i], m_size[i]));
fm = g_off.getFontMetrics(font);
prev_y = cur_y;
if(m_size_pause[i] == 1)
{
p_start_y = prev_y;
got_p = true;
} else
if(!got_p)
p_start_y = prev_y;
line_coords[i] = cur_y + fm.getDescent() + 1;
re_draw[i] = cur_y;
multi_line = NewLine(m_dexc[i], m_xoffset * 2);
for(int l = 0; l < multi_line.length; l++)
{
cur_y += fm.getHeight();
g_off.setColor(m_testcolor[i]);
if(m_centertest[i])
g_off.drawString(multi_line[l], (d.width - fm.stringWidth(multi_line[l])) / 2, cur_y);
else
g_off.drawString(multi_line[l], m_xoffset, cur_y);
}

if(m_linkurl[i].length() > 3)
{
if(i == m_dexc.length - 1)
cur_y += fm.getDescent();
link_cords[link_coord_pos * 3] = prev_y;
link_cords[link_coord_pos * 3 + 1] = cur_y;
link_cords[link_coord_pos * 3 + 2] = i;
link_urls[link_coord_pos] = m_linkurl[i];
link_coord_pos++;
}
if(i != m_dexc.length - 1 && cur_y - p_start_y < d.height && m_size_pause[i] == 2)
{
if(m_size_extra[i])
cur_y = cur_y + (d.height - (cur_y - p_start_y)) + 1 + (cur_y - p_start_y);
else
cur_y = cur_y + (d.height - (cur_y - p_start_y)) + 1;
got_p = false;
}
}

} while(++j < 2);
done_draw = true;
}

public void WhereAmI()
{
for(int i = num_dexcrips - 1; i > -1; i--)
if(scroll_y > -line_coords[i])
cur_dline = i;

}

Font font;
FontMetrics fm;
Thread animator;
Dimension d;
Image off;
Graphics g_off;
Graphics g_erase;
Image erase;
URL goURL;
boolean break_pause;
boolean tag;
long next_time;
int my;
int hLine;
boolean mouseIn;
int l_h;
int soff;
int m_size_pause[];
int num_links;
int link_cords[];
String link_urls[];
int line_coords[];
int re_draw[];
int font_xtyle;
int num_dexcrips;
int scroll_y;
int last_h;
int cur_dline;
int hold_move;
int link_ref;
boolean done_draw;
boolean first_run;
boolean paused;
boolean mdown;