我有main命令,但java命令不起作用

我有main命令,但java命令不起作用,java,swing,Java,Swing,我知道Java需要主函数,我有一个。这段代码编译时没有错误(这段代码是设计模式手册的源代码),但是当我执行 D:\ java SwingObserverExample Error: Could not find or load main class SwingObserverExample 以下是源代码: package headfirst.designpatterns.observer.swing; import java.awt.*; import javax.swing.*; pu

我知道Java需要主函数,我有一个。这段代码编译时没有错误(这段代码是设计模式手册的源代码),但是当我执行

D:\ java SwingObserverExample 
Error: Could not find or load main class SwingObserverExample
以下是源代码:

package headfirst.designpatterns.observer.swing;

import java.awt.*;
import javax.swing.*;

public class SwingObserverExample{
    JFrame frame;

public static void main(String[] args) {
    SwingObserverExample example = new SwingObserverExample();
    example.go();
}

public void go() {
    frame = new JFrame();

    JButton button = new JButton("Should I do it?");

    // Without lambdas
    //button.addActionListener(new AngelListener());
    //button.addActionListener(new DevilListener());

    // With lambdas
    button.addActionListener(event -> 
        System.out.println("Don't do it, you might regret it!")
    );
    button.addActionListener(event ->
        System.out.println("Come on, do it!")
    );
    frame.getContentPane().add(BorderLayout.CENTER, button);

    // Set frame properties 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(BorderLayout.CENTER, button);
    frame.setSize(300,300);
    frame.setVisible(true);
}

/*
 * Remove these two inner classes to use lambda expressions instead.
 * 
class AngelListener implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        System.out.println("Don't do it, you might regret it!");
    }
}

class DevilListener implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        System.out.println("Come on, do it!");
    }
}
*/
为什么java找不到此程序的主类

我的java文件的目录是
D:\workplace\Head-First设计模式master\Head-First设计模式master\src\headfirst\designpatterns\observer\swing

我从那里运行java命令。

在run命令中包括包名

java headfirst.designpatterns.observer.swing.SwingObserverExample
Java还希望在相对于当前位置的目录
headfirst\designpatterns\observer\swing
中找到与包名匹配的类,以便从中运行应用程序

D:\workplace\Head-First-Design-Patterns-master\Head-First-Design-Patterns-maste‌​‌​r\src

这是因为行
package headfirst.designpatterns.observer.swing
。 该类在包
headfirst.designpatterns.observer.swing
中编译

要么删除它,要么(最好)使用

java headfirst.designpatterns.observer.swing.SwingObserverExample

使用
java
命令执行代码时,请使用classpath-
cp
选项,并在存在主方法的地方添加完全限定的类名-

java -cp headfirst.designpatterns.observer.swing.SwingObserverExample

我删除了第一行,它成功了,为什么会发生这种情况?@saman,因为它现在在默认包中。这就是为什么你不必提及包裹信息。我认为Reimeus解决方案在这方面也很好case@Razib我在哪里可以找到关于这个的信息,或者我必须搜索什么关键字?@saman,搜索。您还没有说目录结构是什么样的,但是Java希望类位于相对于当前位置的目录
headfirst\designpatterns\observer\swing
…我的目录是
D:\workplace\Head-First设计模式master\Head-First设计模式master\src\headfirst\designpatterns\observer\swing
在这种情况下,您可以使用运行时位置
D:\workplace\Head-First设计模式master\Head-First设计模式maste‌​r\src
它工作了。请在您的答案中包含这一点,我将把您的答案标记为解决方案。最好包含关于java包教程的链接。谢谢阿加尼,我有(关于你的)不相关的问题,请允许我在评论中说?