【问题标题】:Running Java Code as a Java Application and not an Applet将 Java 代码作为 Java 应用程序而不是 Applet 运行
【发布时间】:2021-09-24 22:29:45
【问题描述】:

我是 Java 新手,我一直在尝试将此代码作为 Java 应用程序而不是 Java 小程序运行,但它不起作用(使用 Eclipse IDE)。当我单击运行时,它没有让我选择将其作为 Java 应用程序运行。我该如何解决这个问题?

这是我的代码:

import java.awt.Color;

import acm.graphics.GOval;
import acm.graphics.GPoint;
import acm.graphics.GRect;
import acm.program.*;
import acm.graphics.*;

public class Coordinates extends GraphicsProgram {
    public void run() {
        GOval myOval = new GOval(-8, -8, 16, 16);
        myOval.setColor(Color.RED);
        myOval.setFilled(true);
        add(myOval);

    }

}

这是我点击运行时给我的选项:

Java_Screenshot

谢谢。

【问题讨论】:

  • GraphicsProgram 的代码会很有用
  • 一个小程序在网络浏览器插件中运行。您确定它是作为小程序运行的吗?
  • 您可能在 IDE 中错误地创建了项目。用eclipse替换ide标签
  • 不要使用acm.*
  • 这是一个特殊 api 的子类。 This is it

标签: java eclipse applet


【解决方案1】:

坏消息始于基于 ACM 的 GraphicsProgram 扩展了 Applet/JApplet

这是个坏消息,因为运行小程序和网络启动应用程序所需的 Java 插件技术在 Java 9 前后已被弃用,并已从 Java API 中删除。


要按照示例中的建议进行自定义绘制,我将扩展基于 Swing 的 JPanel 并更改绘制方法,然后将其显示在 JFrame 中。

任何基于 ACM 的东西都不再起作用。

【讨论】:

    【解决方案2】:

    这只是猜测,因为我们无权访问 acm.* 并且小程序有其定义的生命周期,但目的是创建一个 JFrame 并向其中添加 Coordinates 组件

    public class Test {
    
        public static void main(String[] args) {
            new Test();
        }
    
        public Test() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JFrame frame = new JFrame();
                    Coordinates coordinates = new Coordinates();
                    coordinates.init();
                    frame.add(coordinates);
                    coordinates.start();
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class Coordinates extends GraphicsProgram {
    
            public void run() {
                GOval myOval = new GOval(-8, -8, 16, 16);
                myOval.setColor(Color.RED);
                myOval.setFilled(true);
                add(myOval);
    
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      你需要一个 main 方法,哟。

      public static void main(String[] args){}
      

      【讨论】:

      • 谢谢,我也试过了,但它给了我一个错误提示:Cannot make a static reference to the non-static method add(GObject) from the type GraphicsProgram
      • 这意味着它正在运行您的代码,但您的代码中有错误。 add 是一个实例方法。它需要调用 GraphicsProgram 类的实例(对象)。相比之下,静态方法可以在不创建其类的实例对象的情况下被调用。
      • 嗯,这是一个编译错误,而不是运行时错误,但考虑到您编写的代码,这是有道理的。
      【解决方案4】:

      试试下面的

          public static void main(String[] args) {
              try {
                  SwingUtilities.invokeAndWait(new Coordinates());
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      

      【讨论】:

      • 我不知道 acm 给你什么,但答案可能在我发布的内容和下面更完整的示例之间
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多