2013-10-06 10 views
1

Я новичок в Java и особенно в JFRAME. Я изучаю основные разработки игр, и я создал простой класс для вывода некоторых графических элементов. Вот мой код:Java и JFrame «NoClassDefFoundError»

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

public class JFrameDemo extends JFrame { 
    public JFrameDemo(){ 
     super("JFrameDemo"); 
     setSize(400,400); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    }  

    public void paint(Graphics g){ 
     super.paint(g); 
     g.setColor(Color.WHITE); 
     g.fillRect(0,0,400,400); 
     g.setColor(Color.RED); 
     g.setFont(new Font("Arial", Font.BOLD, 18)); 
     g.drawString("Doing graphics with JFrame!!", 60, 200); 
    } 

    public static void main(String[] args){ 
     new JFrameDemo(); 
    } 
} 

Хотя во время компиляции все идет, как хорошо, когда я пытаюсь выполнить программка, я получаю следующее сообщение об ошибке:

Исключение в потоке «основного» java.lang.NoClassDefFoundError: JFrameDemo (неправильное имя: jframedemo/JFrameDemo)

Я работаю над Linux Mint 15, а моя версия Java - это 1.7.0_25 среда выполнения OpenJDK. Любые предложения, почему это происходит?

+0

OT: Вы не хотите, чтобы сделать изготовленную на заказ картину в контейнерах верхнего уровня в свинге , Расширьте JPanel и переопределите 'paintComponent' – Reimeus

+0

Вместо того, чтобы создавать папки вручную, представляющие пакет, вместо этого используйте опцию' -d' 'javac'. Создайте папку под названием 'project', внутри которой создаются две папки:' source (для сохранения .java-файлов) 'и' build (для размещения файла после компиляции) '. Теперь просто зайдите в папку 'project' через терминал и напишите' javac -d build source/JFrameDemo.java', это автоматически создаст папку с именем 'jframedemo' в папке' build'. Теперь изнутри 'project', напишите' java jframedemo.JFrameDemo' для выполнения программы. Больше вариантов можно увидеть, просто набрав 'javac' на терминале :-) –

+0

Да, это здорово! Спасибо :) – manosagent

ответ

1

Похоже, что JFrameDemo.class не находится в папке с именем jframedemo, как и ожидалось JVM. Убедитесь в том, что JFrameDemo.java находится в этой папке, прежде чем пытаться собрать и запустить приложение

то команда командной строки будет выглядеть

javac jframedemo/JFrameDemo.java 
java jframedemo.JFrameDemo 
+0

Это действительно сработало! Хотя я не совсем понимаю ... есть ли какой-то учебник или что-то в этой теме? Я имею в виду, я создал папку с именем jframedemo и переместил в нее свой файл «.java». Затем скомпилировал и запустил его, как вы сказали, и это сработало. Почему это решило проблему? – manosagent

+0

Поскольку JVM требует, чтобы класс существовал в структуре каталогов, которые соответствуют имени пакета – Reimeus

+0

Yeap, он получил меня немного после того, как я опубликовал свой комментарий :) Большое спасибо! – manosagent