David001,
你的程序我看到了,先给你提以下几点建议:
1)用JBuilder, 但不要用JBuilder Design
2)程序不能等到全部写完再来编译,到那时修复错误的难度将很大。
3)不要将某一个文件写得过长,在1000行之内是可以接受的。如果更严格的来讲,尽量控制在700行以下。
现在来说说你的程序,
你的程序中的一个文件实在太长。文件过长,也说明OOP还不够。
第一次编译出现49个错误
其中有一个错误是反复的出现,那就是 TestXBRL.java 中的第743 行的那个 for loop.
你是这样写的: for (String se :
tr.getSchemaError())
{
schemaErr += se + "\n";
}
在改掉这个错误后,出现了其他的错误,还有就是你的第三方文件也没给全,所以无法编译。
我写了一个MultiThreadDemo, 你可以参考. 代码如下:
import java.util.*;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Graphics;
import java.awt.Dimension;
public class MultiThreadDemo extends JFrame
{
TimeThread timeThread = new TimeThread(" ");
DrawSomething drawThread = new DrawSomething();
public MultiThreadDemo()
{
super("MultiThreadDemo");
drawThread.setBackground(Color.white);
JPanel contentJP = new JPanel(new BorderLayout());
contentJP.add(drawThread, BorderLayout.CENTER);
contentJP.add(timeThread, BorderLayout.SOUTH);
setContentPane(contentJP);
timeThread.start();
drawThread.start();
addWindowListener(new WinClosing());
super.setSize(500, 300);
}
public static void main(String [] args)
{
MultiThreadDemo mtd = new MultiThreadDemo();
mtd.setVisible(true);
}
class WinClosing extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
drawThread.stop();
timeThread.stop();
System.exit(0);
}
}
class DrawSomething extends JPanel implements Runnable
{
Thread drawThread;
Dimension d;
int h, w;
int startX, startY, endX, endY;
DrawSomething()
{
drawThread = new Thread(this);
}
public void start()
{
drawThread.setName("Drawer");
drawThread.start();
}
public void stop()
{
drawThread = null;
}
public void paintComponent(Graphics g)
{
d = getSize();
h = d.height;
w = d.width;
startX = (int)(Math.random()*w) % w;
startY = (int)(Math.random()*h) % h;
endX = (int)(Math.random()*w) % w;
endY = (int)(Math.random()*w) % h;
super.paintComponent(g);
g.drawLine(startX, startY, endX, endY);
}
/**
* run
*/
public void run()
{
while(drawThread != null)
{
repaint();
try
{
Thread.sleep(500);
}
catch (InterruptedException ie)
{
ie.printStackTrace();
}
}
}
}
class TimeThread extends JLabel implements Runnable
{
CurrentTimer currentTimer;
Thread timer;
String currentTimeStr = null;
TimeThread(String s)
{
super(s, JLabel.RIGHT);
currentTimer = new CurrentTimer();
timer = new Thread(this);
}
public void start()
{
timer.setName("Timer");
timer.start();
}
public void stop()
{
timer = null;
}
public boolean isRunning()
{
return timer.isAlive();
}
/**
* run
*/
public void run()
{
while(timer != null)
{
currentTimeStr = currentTimer.getCurrentTime();
super.setText(currentTimeStr);
super.updateUI();
try
{
Thread.sleep(300);
}
catch (InterruptedException ie)
{
System.err.println(ie.toString());
}
}
}
public String getCurrentTime()
{
return currentTimeStr;
}
}
public class CurrentTimer
{
public String getCurrentTime()
{
String hour24Str = null;
String minStr = null;
Calendar c = new GregorianCalendar();
int hour24 = c.get(Calendar.HOUR_OF_DAY);
int min = c.get(Calendar.MINUTE);
if(hour24/10 == 0)
hour24Str = "0" + new Integer(hour24).toString();
else
hour24Str = new Integer(hour24).toString();
if(min/10 == 0)
minStr = "0" + new Integer(min).toString();
else
minStr = new Integer(min).toString();
String currentTimeStr = hour24Str + ":" + minStr;
return currentTimeStr;
}
}
}