JOptionPane.showinputdialog在applet中打开两次

时间:2014-09-07 19:59:56

标签: java swing applet awt java-2d

public void paint(Graphics g) {
    myWidth = getSize().width; // get this Applet size
    myHeight = getSize().height;
    double xCoord, yCoord;
    int yPixel;
    String str = JOptionPane.showInputDialog("Enter your name.");
    g.drawString(str, 100, 100);

    for (int xPixel = 0; xPixel < myWidth; xPixel++) {
        xCoord = (double) (xPixel - myYAxisHPos) / myXUnitPixels;
        yCoord = f(xCoord);
        yPixel = (int) (myXAxisVPos - yCoord * myYUnitPixels);
        g.drawLine(xPixel, yPixel, xPixel, yPixel);
    }
}

我想知道为什么在我启动applet时它会打开两次。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

public void paint(Graphics g)
 {
 ..
 String str = JOptionPane.showInputDialog("Enter your name.");

永远不要在paint(Graphics)方法中更改GUI或弹出模式对话框!后者将阻止EDT,两者都将导致循环。

  

我想知道为什么在我启动applet时它会打开两次

可以随时调用Paint,它不在程序员的控制之内。

相反,该方法应移至init()方法,并将结果存储为类属性。

类似的东西:

String str = null;

@Override
public void init() {
  str = JOptionPane.showInputDialog("Enter your name.");
  //..
}

答案 1 :(得分:0)

虽然你通常使用draw方法调用paint方法{J}调用方法是由JVM调用你无法控制它。不要在其中使用JOptionPane。每次paintframe获取刷新panel方法都会被调用。