无法从命令行运行swing

时间:2009-02-03 22:52:49

标签: java swing

我在windows中使用命令行来编译然后执行我的java程序。我已经去了http://java.sun.com/docs/books/tutorial/uiswing/start/compile.html并尝试编译HelloWorldSwing.java类。它工作,但当我尝试“java HelloWorldSwing”时,它给了我一堆错误,并在线程“主”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现在也可以使用我删除了包行。

7 个答案:

答案 0 :(得分:4)

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

cd start
java HelloWorldSwing

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

java start.HelloWorldSwing

来自当前文件夹。

另请参阅package tutorial

答案 1 :(得分:3)

试试这个:

  

java HelloWorldSwing

而不是:

  

java start / HelloWorldSwing

java编译器(javac)的参数是一个文件(这就是为什么start / HelloWorldSwing.java可能有效)但Java解释器(java)的参数是类名。

这就是为什么你不在命令行中附加.class,因为没有名为 start / HelloWorldSwing 的类你得到的错误信息(NoClassDefFoundError),上面写着“没有使用该名称找到的类定义。)

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

答案 2 :(得分:2)

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

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

你可以做两件事:

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

b)将package start;行留在代码中,并将-d选项附加到javac并使用完整的班级名称。

我希望这会有所帮助。

答案 3 :(得分:1)

尝试使代码工作正常,确保您在与Java文件相同的目录中并执行

javac HelloWorldSwing.java
java HelloWorldSwing

答案 4 :(得分:1)

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

package start;

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

java start.HelloWorldSwing

答案 5 :(得分:0)

只需添加一行:

import java.awt.*;

答案 6 :(得分:0)

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

    javac HelloWorldSwing.java

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

    java -cp . HelloWorldSwing.java

这个确实有效。