【问题标题】:I have main but java command not working我有 main 但 java 命令不起作用
【发布时间】:2015-05-26 22:28:39
【问题描述】:

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

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-Design-Patterns-master\Head-First-Design-Patterns-master\src\headfirst\designpatterns\observer\swing 我从那里运行 java 命令。

【问题讨论】:

    标签: java swing


    【解决方案1】:

    在运行命令中包含包名

    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
    

    【讨论】:

    • 您还没有说您的目录结构是什么样的,但 Java 期望该类位于相对于当前位置的目录 headfirst\designpatterns\observer\swing....
    • 我的目录是D:\workplace\Head-First-Design-Patterns-master\Head-First-Design-Patterns-master\src\headfirst\designpatterns\observer\swing
    • 在这种情况下,您可以使用D:\workplace\Head-First-Design-Patterns-master\Head-First-Design-Patterns-maste‌​r\src的运行时位置
    • 成功了。请将此包含在您的答案中,我会将您的答案标记为解决方案。最好包含有关 java 包教程的链接。再次感谢
    • 我有一个无关紧要的问题(关于你),请允许在此评论中说出来?
    【解决方案2】:

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

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

    运行它
    java headfirst.designpatterns.observer.swing.SwingObserverExample
    

    【讨论】:

    • 我删除了第一行,它起作用了,为什么会这样?
    • @saman,因为现在它在默认包中。这就是为什么您不必提及包裹信息的原因。我认为 Reimeus 解决方案在这种情况下也可以正常工作
    • @Razib 我在哪里可以找到有关此的一些信息或我必须搜索什么关键字?
    • @saman,搜索java packages
    【解决方案3】:

    在使用java 命令执行代码时,使用类路径 - cp 选项并在 main 方法所在的位置添加完全限定的类名 -

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-15
      • 2021-08-11
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多