Java 从applet打开JFrame

Java 从applet打开JFrame,java,swing,applet,jframe,awt,Java,Swing,Applet,Jframe,Awt,因此,我编写了一个小程序,它可以让球永远在圆圈中滚动,我想让用户决定圆圈滚动的速度,但当我添加JFrame时,出现了一些问题: applet停止、销毁和更新不会出现,因为它们不重要,在开始时没有任何内容: public class Main extends Applet implements Runnable{ private Image I; private Graphics GfU; int ballX, ballY=249; static int radius=20; double Me

因此,我编写了一个小程序,它可以让球永远在圆圈中滚动,我想让用户决定圆圈滚动的速度,但当我添加JFrame时,出现了一些问题:

applet停止、销毁和更新不会出现,因为它们不重要,在开始时没有任何内容:

public class Main extends Applet implements Runnable{

private Image I;
private Graphics GfU;
int ballX, ballY=249;
static int radius=20;
double Memory;
int changeY ,changeX=1;
Speed S = new Speed();

@Override
public void init() {
    setSize(750,750);
    S.setVisible(true);
}

@Override
public void run() {
    while(true){
        if(ballY>=250 || ballY<=-250){
            changeY=0-changeY;
            changeX=0-changeX;
        }
        ballY+=changeY;
        Memory=(double)ballY/250; 
        Memory=Math.asin(Memory);
        Memory=Math.cos(Memory);
        ballX=(int)(Memory*250);
        if(changeX==-1)
            ballX=0-ballX;

        repaint();
        try {
            Thread.sleep(17);            
        }
        catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
}



@Override
public void paint(Graphics g) {
    g.setColor(Color.black);
    g.fillOval(ballX-radius+250, ballY-radius+250, radius*2, radius*2);
}


public void setChangeY(int changeY) {
    this.changeY = changeY;
}

public void Done(){
    S.setVisible(false);
    Thread BallRun = new Thread(this);
    BallRun.start();
}

}

如果您因缺乏信息而感到困扰,请向我们表示感谢和歉意,这里有一些事情需要考虑:

不要使用JFrame。使用JDialog作为弹出窗口。此外,您可能不应该在构造函数中创建对话框。相反,您应该有一个JMenuItem,以便用户可以在希望弹出窗口显示时单击菜单

不要使用Applet,它是AWT组件。您应该在Swing应用程序中使用JApplet

不应覆盖小程序的绘制方法。相反,您应该向applet添加一个JPanel,然后覆盖paintComponent。。。与您的定制绘画

不要使用循环来控制动画。相反,您应该使用摆动计时器

从阅读文章开始。以下章节介绍:

如何制作小程序 如何使用摆动计时器 表演定制绘画 您的Speed类扩展了JFrame,但您唯一设置的是setDefaultCloseOperationEXIT_ON_CLOSE,您应该使用setSizewidth、height设置JFrame的至少se大小,并使用setVisibletrue将其设置为可见。 还有一件事我看不出你在哪里把JFrame添加到了主类中。。。 您应该添加它来创建一个新的速度对象:Speed objectname=new Speed

如果我理解正确的话,那就是你的问题。 我想您可以在这里阅读以了解如何使用JFrame:

即使在完全受信任的小程序中也不允许这样做。关闭框架将关闭运行启动它的小程序的JVM。该JVM也可能正在运行其他小程序

像这样看。承载小程序的网页就像一个客人,而网页是一个招待所。对于一个小程序来说,结束JVM就像一个客人在砸碎所有窗户的同时烧毁了宾馆

可能“工作”不会产生AccessControlException,但实际上,小程序不应该启动框架。改用JDialog


一般提示:确保配置为针对小程序和JWS应用程序显示。如果默认级别没有输出,请提高该级别并重试。如果没有其中包含的信息,我怀疑是否有可能成功开发小程序。

谢谢,但是你写的东西我不太懂一半,但我会研究这些东西。JApplet就像更好的Applet,对吗?JApplet在您的项目中更好,因为您必须与像JFrame这样的swing组件交互,而JApplet是一个swing组件。谢谢,我会研究它。最后一个问题,是否有Applet比JApplet更好的情况?我们可以说,如果在不必与swing交互的情况下使用Applet,情况会更好。oracle文档说JApplet代表Swing,而Applet代表AWT。您可以在这里阅读JApplet的文档:在这里阅读Applet的文档:我将setVisibletrue放在init中,dos'n setDefaultCloseOperationEXIT_ON_CLOSE和setDefaultCloseOperationJFrame.EXIT_ON_CLOSE做同样的事情吗?顺便说一句,我完全忘记了设置大小,所以谢谢。你在关闭时写了EXIT_,但应该是JFrame。当类扩展JFrame时,关闭时EXIT_都可以工作。我不明白你在一般提示中写了什么。你说的是,如果我关闭EXIT_,有人会关闭它,这会毁掉游戏所在的整个网站?另外,如果你能给我发送一个学习JDialog的好网站,我会很高兴的,因为我没有找到。1你不明白这个提示有什么?具体点,因为我不打算写关于它的教程。2不,它不会破坏整个站点,因为安全经理会阻止该操作。3将JDialog教程添加到您最喜欢的搜索引擎中,并按照顶部链接进行操作。1我不理解您在提示中写的任何内容。3.我试过了,但没有一件事很清楚。你在小费上写的东西我都不懂。放弃编程。你显然不是天生的。
public class Speed extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;

public Speed(){
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    JPanel P = new JPanel();
    JLabel L = new JLabel("please enter velosity(pixels per second)");
    final JTextField TF = new JTextField("00");
    final Main M = new Main();
    JButton B = new JButton("OK");

    B.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            M.setChangeY(Integer.parseInt(TF.getText()));
            M.Done();

        }
    });

    P.add(L,BorderLayout.NORTH);
    P.add(TF,BorderLayout.WEST);

}

@Override
public void actionPerformed(ActionEvent arg0) {


}
}
setDefaultCloseOperation(EXIT_ON_CLOSE);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);