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

2015-09-13 14:48:59 +08:00
 lizhiqing1996

如图所示,最近在看《 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 新人,请轻喷

2052 次点击
所在节点    问与答
5 条回复
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
2015-09-13 15:17:15 +08:00
package
Cloudee
2015-09-13 15:20:04 +08:00
去上一级目录执行 java sizedFrame. SizedFrameTest ,你的 java 类是在 sizedFrame 包里的,所以生成的 class 需要放到 sizedFrame 目录下,而且执行的时候也需要带着包名
EchoChan
2015-09-13 15:20:44 +08:00
含有包名的 Java 代码在 cmd 下编译运行需要去掉 Java 代码中的报名或命令中加上包名前缀。
1 、把 package sizedFrame;
2 、编译命令变为 Javac
EchoChan
2015-09-13 15:22:02 +08:00
2 、编译命令变为 javac sizedFrame.SizedFrameTest

其实我前几天也是遇到这问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/220366

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX