【问题标题】:Start:applet not initialized when trying to open a frame in an applet开始:尝试在小程序中打开框架时未初始化小程序
【发布时间】:2014-03-11 20:14:35
【问题描述】:

我在 Herbert Schildt 的《java 2》一书中遇到了一段代码。这是代码。

import java.applet.Applet;

导入 java.awt.; 导入 java.awt.event.;

public class SampleFrame extends Frame
{
    public SampleFrame(String title)
    {
        super(title);
        MyWindowAdapter wAdapter = new MyWindowAdapter(this);
        addWindowListener(wAdapter);
    }
    public void paint(Graphics g)
    {
        g.drawString("this is in the frame window", 10, 40);
    }

}
class MyWindowAdapter extends WindowAdapter
{
    SampleFrame sampleFrame;
    public MyWindowAdapter(SampleFrame sampleFrame)
    {
        this.sampleFrame = sampleFrame;
    }
    public void WindowClosing(WindowEvent we)
    {
        sampleFrame.setVisible(false);
    }
}
class MyApplet extends Applet
{
    Frame f;
    public void init()
    {
        f = new SampleFrame("a frame window");
        f.setSize(250, 250);
        f.setVisible(true);
    }
    public void start()
    {
        f.setVisible(true);
    }
    public void stop()
    {
        f.setVisible(false);
    }
    public void paint(Graphics g)
    {
        g.drawString("this is an applet window", 10, 20);
    }
}

根据这本书,它应该启动一个应该启动一个框架的小程序。但是当小程序在状态栏中启动时,它会说“开始:小程序未初始化” 为什么会这样?

我确实创建了小程序,但没有像这样将派生的小程序类声明为公共

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;


class MouseEvents extends Applet implements MouseListener,
        MouseMotionListener
{
    String msg = "";
    int mouseX = 0 ,mouseY = 0 ,count=0;
    Boolean tPU ;
    private Point myPoint;

    public MouseEvents()
    {
        myPoint = new 
                Point();

    }

    public void init()
    {
        addMouseListener(this);
        addMouseMotionListener(this);
    }
    @Override
    public void mouseDragged(MouseEvent arg0)
    {
        // TODO Auto-generated method stub
        mouseX = arg0.getX();
        mouseY = arg0.getY();
        msg = "*";
        myPoint = arg0.getPoint();
        tPU = arg0.isPopupTrigger();
        count = arg0.getClickCount();
        arg0.translatePoint(100, 100);
        myPoint = arg0.getPoint();

        showStatus("dragging mouse at " + arg0.getX() + ", " +arg0.getY());
        showStatus("popUps ?"+tPU);
        showStatus("dragging mouse at " + myPoint.x + ", " +myPoint.y);
        showStatus("dragging mouse at " + myPoint.x + ", " +myPoint.y);
        showStatus("dragging mouse at " + myPoint.x + ", " +myPoint.y);

        repaint();
    }

    @Override
    public void mouseMoved(MouseEvent arg0)
    {
        // TODO Auto-generated method stub
        showStatus("moving mouse at " + arg0.getX() + ", " +arg0.getY());
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
        // TODO Auto-generated method stub
        mouseX=0;
        mouseY=10;
        msg="mouse clicked";
        repaint();
    }

    @Override
    public void mouseEntered(MouseEvent e)
    {
        // TODO Auto-generated method stub
        mouseX=0;
        mouseY=10;
        msg="mouse entered";
        repaint();
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
        // TODO Auto-generated method stub
        mouseX=0;
        mouseY=20;
        msg="mouse exited";
        repaint();
    }

    @Override
    public void mousePressed(MouseEvent e)
    {
        // TODO Auto-generated method stub
        mouseX = e.getX();
        mouseY = e.getY();
        msg = "mouse pressed down";
        repaint();
    }

    @Override
    public void mouseReleased(MouseEvent e)
    {
        // TODO Auto-generated method stub
        mouseX = e.getX();
        mouseY = e.getY();
        msg = "mouse released up";
        repaint();
    }
    public void paint(Graphics g)
    {
        g.drawString(msg, mouseX, mouseY);
    }

}

【问题讨论】:

  • 说实话,我认为您在阅读一本关于 Java 2 的书是在浪费时间。Java 2 在 2004 年被 Java 5 取代,Java 5 是一种更复杂的语言。我们现在正在使用 Java 7,有些人甚至在使用 Java 8。没有人再使用 Java 2,而且您从那本书中学到的许多技术都将过时并且不会很有用。
  • 我在巴基斯坦的当地市场搜索了 java 7/8,但在任何地方都没有找到。在网上搜索了一本免费的书。仍然没有找到。你会或其他人好心给我一个赫伯特·希尔特最新版电子书的直接链接吗?
  • 抱歉,我删除了我的最后一条评论,因为我不确定所链接的图书的版权状态。我不确定在这里链接到它是否合法,但我推荐 Bruce Eckel 的“Thinking in Java”。第四版涵盖了 Java 6,它与当前“足够接近”以供使用。你可以在网上找到它。

标签: java


【解决方案1】:

如果您查看小程序控制台,您应该会看到错误的其余部分

MyApplet.class is not public or has no public constructor.

即将类声明为public

public class MyApplet extends Applet {

【讨论】:

  • 当我宣布它公开时,它说应该单独定义一个公共类。除了为什么 Herbert Schildt 没有注意到这一点?我的意思是没有冒犯,但如果这就是这本书没有这么说的原因吗?
  • 我在学习小程序和处理鼠标/键盘事件时创建了小程序,我没有将扩展的小程序类声明为公共的,它们确实工作正常。那我为什么要在这里声明它们?
  • applet 框架依赖于公开的类来实例化(通过反射)——从来没有见过一个可以工作的小程序被声明为 :)
  • 我已经用我之前用来创建小程序的代码编辑了我的帖子,但没有将我的派生小程序类声明为公共
  • 似乎你对 public 构造函数与声明类本身 public 感到困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2015-01-09
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多