使用类中的简单Applet

时间:2015-12-04 12:05:05

标签: java japplet

我有一个简单的问题,我创建了一个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();
    }

在上面提到的两行之后。它似乎有效。

1 个答案:

答案 0 :(得分:0)

你应该改用:

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

详细讨论:

JFrame Exit on close Java

在经典app(main)中:应用程序在退出之前等待JFrame。

或者您可以使用System.exit()

关闭所有内容

与JUNIT:

JUNIT在测试结束时关闭所有GUI(通过exit())

为了防止这种情况:请参阅:

JUnit - stop it from exiting on finish?

例如,如果你阻止JUNIT完成(只是附加一个带有无限循环的测试),并且你按照一定的顺序启动测试(在类之前使用@FixMethodOrder(MethodSorters.NAME_ASCENDING)),它应该可以工作。 / p>