V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lizhiqing1996
V2EX  ›  问与答

求助 | Java 的 hello world 能运行,书上的案例却提示找不到或无法加载主类

  •  1
     
  •   lizhiqing1996 · 2015-09-13 14:48:59 +08:00 · 2132 次点击
    这是一个创建于 3352 天前的主题,其中的信息可能已经有所发展或是发生改变。

    image

    如图所示,最近在看《 java 核心技术》一书,执行书上的案例却一直提示“找不到或无法加载主类”

    在网上找的方法都是关于配置环境变量的,也都试了,都不能解决问题

    于是在同目录下写了一个 hello world ,却能运行了

    我很好奇书上的案例为什么还是不能运行

    代码如下:

    package sizedFrame;
    
    import java.awt.*;
    import javax.swing.*;
    
    /**
     * @version 1.32 2007-04-14
     * @author Cay Horstmann
     */
    public class SizedFrameTest
    {
       public static void main (String[] args )
       {
          EventQueue.invokeLater (new Runnable ()
             {
                public void run ()
                {
                   JFrame frame = new SizedFrame ();
                   frame.setTitle ("SizedFrame");
                   frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE );
                   frame.setVisible (true );
                }
             });
       }
    }
    
    class SizedFrame extends JFrame
    {
       public SizedFrame ()
       {
          // get screen dimensions
    
          Toolkit kit = Toolkit.getDefaultToolkit ();
          Dimension screenSize = kit.getScreenSize ();
          int screenHeight = screenSize.height;
          int screenWidth = screenSize.width;
    
          // set frame width, height and let platform pick screen location
    
          setSize (screenWidth / 2, screenHeight / 2 );
          setLocationByPlatform (true );
    
          // set frame icon
    
          Image img = new ImageIcon ("icon.gif").getImage ();
          setIconImage (img );      
       }
    }
    

    还有一个好奇的地方就是这个文件里明明只有两个类,为何编译过后会出现三个类文件?

    那个 SizedFrameTest$1.class 是什么情况?

    Java 新人,请轻喷

    5 条回复    2015-09-13 15:22:02 +08:00
    zonghua
        1
    zonghua  
       2015-09-13 15:05:56 +08:00
    java SizedFrameTest 运行,不需要后缀,貌似还要配置好 classpath 变量才能正确加载其他类。还是用 IDE 吧
    ```java
    C:\Users\me\Desktop>java SizedFrameTest
    Exception in thread "main" java.lang.NoClassDefFoundError: SizedFrameTest (wrong name: sizedFrame/SizedFrameTest )
    at java.lang.ClassLoader.defineClass1 (Native Method )
    at java.lang.ClassLoader.defineClass (Unknown Source )
    at java.security.SecureClassLoader.defineClass (Unknown Source )
    at java.net.URLClassLoader.defineClass (Unknown Source )
    at java.net.URLClassLoader.access$100 (Unknown Source )
    at java.net.URLClassLoader$1.run (Unknown Source )
    at java.net.URLClassLoader$1.run (Unknown Source )
    at java.security.AccessController.doPrivileged (Native Method )
    at java.net.URLClassLoader.findClass (Unknown Source )
    at java.lang.ClassLoader.loadClass (Unknown Source )
    at sun.misc.Launcher$AppClassLoader.loadClass (Unknown Source )
    at java.lang.ClassLoader.loadClass (Unknown Source )
    at sun.launcher.LauncherHelper.checkAndLoadMain (Unknown Source )
    ```
    SoloCompany
        2
    SoloCompany  
       2015-09-13 15:17:15 +08:00 via Android   ❤️ 1
    package
    Cloudee
        3
    Cloudee  
       2015-09-13 15:20:04 +08:00   ❤️ 1
    去上一级目录执行 java sizedFrame. SizedFrameTest ,你的 java 类是在 sizedFrame 包里的,所以生成的 class 需要放到 sizedFrame 目录下,而且执行的时候也需要带着包名
    EchoChan
        4
    EchoChan  
       2015-09-13 15:20:44 +08:00 via Android   ❤️ 1
    含有包名的 Java 代码在 cmd 下编译运行需要去掉 Java 代码中的报名或命令中加上包名前缀。
    1 、把 package sizedFrame;
    2 、编译命令变为 Javac
    EchoChan
        5
    EchoChan  
       2015-09-13 15:22:02 +08:00 via Android
    2 、编译命令变为 javac sizedFrame.SizedFrameTest

    其实我前几天也是遇到这问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2874 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:34 · PVG 16:34 · LAX 00:34 · JFK 03:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.