我有一个简单的问题,我创建了一个Applet来显示一些结果:
public class Plot2D extends JApplet {
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.red);
Dimension size = getSize();
Insets insets = getInsets();
int w = size.width - insets.left - insets.right;
int h = size.height - insets.top - insets.bottom;
Random r = new Random();
for (int i = 0; i < 1000; i++) {
int x = Math.abs(r.nextInt()) % w;
int y = Math.abs(r.nextInt()) % h;
g2d.drawLine(x, y, x, y);
}
}
public void main(String[] args) {
JFrame frame = new JFrame("Points");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// Timer timer = new Timer(2000, new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
frame.add(new Plot2D());
frame.setSize(200, 200);
frame.setResizable(false);
frame.setVisible(true);
// }
// });
// timer.setRepeats(true);
// timer.start();
};
}
哪个工作正常并显示随机点。现在如果我使用以下方法从另一个类调用该Applet:
Plot2D plotting = new Plot2D();
plotting.main(null);
它显示相同的数字,但小程序不会在屏幕上显示。我怎样才能启用它?我已经尝试过似乎不起作用的计时器。有什么想法吗?
谢谢。
编辑。作为对Applet如何调用的问题的回答,这里是类:
public class PedestrianSpawnerTest {
// @Before
// public void initialise(){
// frame = new JFrame("Points");
// }
public void test() {
int numberOfPedestrians = 10;
PedestrianSpawner pedestrianSpawner = new PedestrianSpawner();
pedestrianSpawner.SpawnRandomlyStandardPedestrians(numberOfPedestrians);
List<StandardPedestrian> listOfPedestrians = pedestrianSpawner
.getListOfPedestrians();
for (int i = 0; i < listOfPedestrians.size(); i++) {
System.out.println(listOfPedestrians.get(i).getId());
System.out.println(listOfPedestrians.get(i).getPosition());
System.out.println(listOfPedestrians.get(i).getVelocity());
System.out.println(listOfPedestrians.get(i).getTarget());
}
Plot2D plotting = new Plot2D();
plotting.main(null);
}
}
编辑2:好的我通过添加
找到了一种hacky技巧try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在上面提到的两行之后。它似乎有效。
答案 0 :(得分:0)
你应该改用:
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
详细讨论:
在经典app(main)中:应用程序在退出之前等待JFrame。
或者您可以使用System.exit()
关闭所有内容 与JUNIT:JUNIT在测试结束时关闭所有GUI(通过exit())
为了防止这种情况:请参阅:
JUnit - stop it from exiting on finish?
例如,如果你阻止JUNIT完成(只是附加一个带有无限循环的测试),并且你按照一定的顺序启动测试(在类之前使用@FixMethodOrder(MethodSorters.NAME_ASCENDING)),它应该可以工作。 / p>