【问题标题】:Java error: cannot cast to java.applet.Applet in EclipseJava 错误:无法在 Eclipse 中转换为 java.applet.Applet
【发布时间】:2016-01-11 07:48:12
【问题描述】:

所以这里是在 Eclipse 中无法编译的非常简单的代码:

import processing.core.*;

public class MyPApplet extends PApplet {
}

我正在尝试将其作为 Java Applet 运行,但出现错误:

java.lang.ClassCastException: MyPApplet cannot be cast to java.applet.Applet

问题是PAppletprocessing 包中的一个类,它扩展了java.applet.Applet,并且MyPApplet 扩展了PApplet,但我仍然得到这个错误。这没有道理。为什么不能将MyPApplet 转换为java.applet.Applet

有人可以帮忙吗?

【问题讨论】:

  • 您确定PApplet 扩展了Applet?可以查一下吗?
  • ClassCastException 是运行时错误,但您说代码无法编译。那么,它是什么?
  • @malaguna 我检查了文档,它扩展了 Applet。我下载了以前版本的处理库:2.2.1,它工作得很好。当他们制作新版本 3.0.1 时,肯定发生了一些变化,但没有记录对 PApplet 的更改。
  • @dsp_user 对不起,我习惯了 C++,如果发生这样的错误,它会无法编译。
  • @Syd,如果有源代码会很好,但是,您可以在运行时调试并查看MyPApplet 的真实类型。您还可以将其与库 2.2.1 和 3.0.1 进行比较

标签: java eclipse applet processing


【解决方案1】:

就像 George 说的,PApplet 不再扩展 Applet 处理 3。

但我建议不要使用旧版本的 Processing,而是使用 runSketch() 函数来运行您的草图:

public class MyPapplet extends PApplet {

  public static void main(String... args){
    String[] pArgs = {"MyPapplet "};
    MyPapplet mp = new MyPapplet ();
    PApplet.runSketch(pArgs, mp);
  }

  public void settings() {
    size(200, 100);
  }
  public void draw() {
    background(255);
    fill(0);
    ellipse(100, 50, 10, 10);
  }
}

如果您确实需要访问底层的原生组件,则必须编写取决于您使用的渲染器的代码。以下是使用默认渲染器的方法:

PSurfaceAWT awtSurface = (PSurfaceAWT)mp.surface;
PSurfaceAWT.SmoothCanvas smoothCanvas = (PSurfaceAWT.SmoothCanvas)awtSurface.getNative();

但第一种方法对大多数人来说应该已经足够好了,所以先试试吧。

【讨论】:

    【解决方案2】:

    在 Processing 3.x PApplet 中不再扩展 Applet:

    Applet 消失了——Java 的 java.awt.Applet 不再是 PApplet 使用的基类,因此任何使用 Applet 特定方法(或假设 PApplet 是 Java AWT 组件对象)的草图都需要重写。

    来自 github repo wiki 页面Changes in 3.0

    如果您需要小程序功能,请使用旧版本(2.2.1 或更早版本)。

    【讨论】:

      【解决方案3】:

      以下是在 Eclipse 中处理 3.x 程序的模板。但是,您应该将它们作为“Java 应用程序”而不是“Java Applet”运行:

      import processing.core.PApplet;
      
      public class P5Template extends PApplet {
      
          public void settings() {
      
              size(512, 200);
          }
      
          public void setup() {
      
          }
      
          public void draw() {
      
              background(0, 30, 0);
          }
      
          public static void main(String[] args) {
      
              PApplet.main(new String[] { P5Template.class.getName() });
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        • 2012-11-03
        • 2019-12-31
        • 1970-01-01
        相关资源
        最近更新 更多