【问题标题】:can't run swing from the command line无法从命令行运行 swing
【发布时间】:2009-02-03 22:52:49
【问题描述】:

我在 windows 中使用命令行编译然后执行我的 java 程序。我去了http://java.sun.com/docs/books/tutorial/uiswing/start/compile.html 并尝试编译HelloWorldSwing.java 类。它起作用了,但是当我尝试“java HelloWorldSwing”时,它给了我一堆错误,并在线程“main”java.lang.NoClassDefFoundError:HelloWorldSwing(错误名称:start / HelloWorldSwing)中说出了一些异常

我尝试使用 java start/HelloWorldSwing 运行,它显示 noClassDefFoundError。 javac我也没有错误。这是教程中的代码:

import javax.swing.*;        

public class HelloWorldSwing {
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Add the ubiquitous "Hello World" label.
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

编辑:使用 javaw

弹出窗口

“发生了java异常”

另一个窗口

“错误:找不到主类。 错误:发生 jni 错误,请检查您的安装并重试。”

在运行任何 java 程序时从来没有遇到过任何问题,是我遗漏了什么吗?有没有办法知道它是什么?

我也在 .java 和 .class 所在的同一路径中运行命令。

我编译程序的路径中没有文件夹开始。

EDIT2 我用 java 尝试了 start/HelloWorldSwing 和 HelloWorldSwing。

javac 也没有任何错误。当我使用 javaw 和 java 给我 NoClassDefFoundException 时,我得到 2 个弹出窗口,其中包含我之前输入的消息,然后谈论 ClassLoaders 等等。

EDIT3 我通过删除“包开始”让它工作;线。我该怎么做才能让它工作?

javaw 现在也可以工作了,因为我删除了 package 行。

【问题讨论】:

  • 您能否粘贴控制台的输出,从您输入“javac etc etc”的位置开始,继续您输入 javac etc.etc 的位置?

标签: java swing


【解决方案1】:

您从哪里调用java 命令?根据您的描述,HelloWorldSwing.class 位于“start”文件夹中,但不在包中。这很可能是错误的根源。试试:

cd start
java HelloWorldSwing

编辑:教程中的代码确实有一个“package start;”声明。你删除了吗?如果没有,将 HelloWorldSwing 放入“start”文件夹并运行

java start.HelloWorldSwing

从当前文件夹。

另请参阅package tutorial

【讨论】:

  • 如果类包含包指令则不会。
  • @Pourquoi Litytestdata:什么没有发生?
  • @mmyers: 是的,可能错误就在那里,在启动包中。 :)
【解决方案2】:

试试这个:

java HelloWorldSwing

而不是:

java 启动/HelloWorldSwing

java 编译器 (javac) 的参数是一个文件(这就是 start/HelloWorldSwing.java 可能工作的原因),但 Java 解释器 (java) 的参数是一个类名。

这就是你不在命令行中附加 .class 的原因,因为没有名为 start/HelloWorldSwing 的类,你会收到错误消息 ( NoClassDefFoundError ),上面写着“没有找到具有该名称的类定义)。

为使事情更简单,请从 .java 文件所在的同一目录编译并运行您的第一个程序。

【讨论】:

  • 他做到了;请参阅问题的第一段。
【解决方案3】:

是的。该页面有一个小错误:

该类使用包,但在运行说明中没有使用包

你可以做两件事:

a) 删除包名(删除行pacakge start;)并按照指示运行

或者

b) 保留代码中的package start; 行并将-d 选项附加到javac 并使用完整的类名。

我希望这会有所帮助。

【讨论】:

  • 这就是为什么您应该使用内置的编辑器功能将图像上传到 imgur,而不是自己管理它们。或者更好的是,根本不使用图片,而是使用代码块(例如 you did half an hour before 发布此答案)。 :-/
  • 大约 7 年前我第一次创建此答案时,内置编辑器并不存在。
【解决方案4】:

尝试代码工作正常,确保您与 Java 文件位于同一目录并执行

javac HelloWorldSwing.java
java HelloWorldSwing

【讨论】:

    【解决方案5】:

    您链接到的代码与您在问题中包含的代码不同。它在顶部有这一行:

    package start;
    

    在 Java 中,包结构必须由目录结构镜像。因此,如果您的类位于名为“start”的包中,则编译后的类文件必须位于名为“start”的目录中。因此,请确保 HelloWorldSwing.class 位于“start”目录中并从父目录运行以下内容:

    java start.HelloWorldSwing
    

    【讨论】:

      【解决方案6】:

      只需添加一行:

      import java.awt.*;

      【讨论】:

        【解决方案7】:

        您可以通过以下方式编译它:

            javac HelloWorldSwing.java
        

        您可以通过以下方式运行它:

            java -cp . HelloWorldSwing.java
        

        这个真的很管用。

        【讨论】:

          猜你喜欢
          • 2013-12-29
          • 1970-01-01
          • 1970-01-01
          • 2019-07-10
          • 1970-01-01
          • 1970-01-01
          • 2020-12-20
          • 2020-02-12
          • 2019-01-28
          相关资源
          最近更新 更多