@MarkusEfr

Как избавится от NoClassDefFoundError после сборки JavaFX проекта в Eclipse?

Изучаю Java, создал тестовый проект "расписание учебы", что-бы ознакомится с работой в Eclipse (OS Linux Mint) и напомнить основы. Настройка и разработка проекта прошла хорошо, но после сборки jar не запускается, а выдает ошибка. Прошу помочь понять в чем она состоит и как исправить? 5b614a7f02866817652009.png5b614a8e15860530065615.png5b614a976f385110409434.png
Структуру проекта в IDE, работу и ошибку демонстрируют изображения.
Файлы проекта:
Education.java наследуется от Application и содержит main программы.
package application;
	
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class Education extends Application {
	@Override
	public void start(Stage primaryStage) {
			try {
				Parent root = FXMLLoader.load(getClass()
	                    .getResource("Scene.fxml"));
	 
	            primaryStage.setTitle("My Education");
	            primaryStage.setScene(new Scene(root));
	            primaryStage.show();
			} catch(Exception e) {
				e.printStackTrace(); }
	}
	
	public static void main(String[] args) {
		launch(args);
	}
}

Controller.java содержит методы для выбора дня учебы и объявление элементов интерфейса
package application;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.MenuButton;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea;

public class Controller implements Initializable {
  @FXML
  private MenuButton Days = new MenuButton();
  @FXML
  private MenuItem day1 = new MenuItem();
  @FXML
  private MenuItem day2 = new MenuItem();
  @FXML
  private MenuItem day3 = new MenuItem();
  @FXML
  private MenuItem day4 = new MenuItem();
  @FXML
  private MenuItem day5 = new MenuItem();
  @FXML
  private TextArea text = new TextArea();
  
  
	@Override
	public void initialize(URL location, ResourceBundle resources) {

	}
	@FXML
	public void chooseDay1(ActionEvent event) {
	       System.out.println("Button Clicked!");  
	       text.setText("");
	       String [] Day = new String [] {"День 1","Алгоритмы на Java. 1 час.","Изучаем JavaEE. 1 час.","Отдых. Еда.","Паттерны проектирования. 40 мин.", "Изучение ООП. 40 мин."} ;
	        // Show in VIEW
           for (String i:Day) {
	       text.appendText(i+"\n"); 
	       }
    }@FXML
	public void chooseDay2(ActionEvent event) {
	       System.out.println("Button Clicked!");  
	       text.setText("");
	       String [] Day = new String [] {"День 2","Рефакторинг. 30 мин","Изучаем JavaEE. 1 час","Отдых. Еда.","Структуры данных. 30 мин.", "Изучение ООП. 30 мин."} ;
	        // Show in VIEW
        for (String i:Day) {
	       text.appendText(i+"\n"); 
	       }
 } @FXML
	public void chooseDay3(ActionEvent event) {
	       System.out.println("Button Clicked!");  
	       text.setText("");
	       String [] Day = new String [] {"День 3","Алгоритмы на Java. 1 час","Изучаем JavaEE. 1 час","Отдых. Еда.","Java 8 Полное руководство. 40 мин.", "Изучение ООП. 30 мин."} ;
	        // Show in VIEW
        for (String i:Day) {
	       text.appendText(i+"\n"); 
	       }
 } @FXML
	public void chooseDay4(ActionEvent event) {
	       System.out.println("Button Clicked!");  
	       text.setText("");
	       String [] Day = new String [] {"День 4","Рефакторинг. 30 мин.","Изучаем JavaEE. 1 час","Отдых. Еда.","Паттерны проектирования. 30 мин.", "Коллекции в Java. 30 мин."} ;
	        // Show in VIEW
        for (String i:Day) {
	       text.appendText(i+"\n"); 
	       }
 } @FXML
	public void chooseDay5(ActionEvent event) {
	       System.out.println("Button Clicked!");  
	       text.setText("");
	       String [] Day = new String [] {"День 5","Алгоритмы на Java. 40 мин.","Изучаем JavaEE. 1 час","Отдых. Еда.","Java 8 Полное руководство. 40 мин.", "Изучение ООП. 30 мин."} ;
	        // Show in VIEW
        for (String i:Day) {
	       text.appendText(i+"\n"); 
	       }
 }
}

Scene.fxml описывает форму интерфейса программы.
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.text.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="325.0" prefWidth="397.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <children>
      <MenuButton fx:id="Days" layoutX="28.0" layoutY="19.0" mnemonicParsing="false" prefHeight="26.0" prefWidth="134.0" text="Choose day">
        <items>
            <MenuItem fx:id="day1" mnemonicParsing="false" onAction="#chooseDay1" text="Day 1" />
            <MenuItem fx:id="day2" mnemonicParsing="false" onAction="#chooseDay2" text="Day 2" />
          <MenuItem fx:id="day3" mnemonicParsing="false" onAction="#chooseDay3" text="Day 3" />
          <MenuItem fx:id="day4" mnemonicParsing="false" onAction="#chooseDay4" text="Day 4" />
            <MenuItem fx:id="day5" mnemonicParsing="false" onAction="#chooseDay5" text="Day 5" />
        </items>
         <font>
            <Font name="DejaVu Sans Bold" size="13.0" />
         </font>
      </MenuButton>
      <TextArea fx:id="text" editable="false" layoutY="57.0" opacity="0.8" prefHeight="242.0" prefWidth="397.0" AnchorPane.bottomAnchor="26.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="57.0">
         <font>
            <Font name="KacstOffice" size="17.0" />
         </font></TextArea>
      <ImageView fitHeight="52.0" fitWidth="176.0" layoutX="221.0" layoutY="3.0" pickOnBounds="true" AnchorPane.bottomAnchor="270.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="3.0">
         <image>
            <Image url="@../../img/education.png" />
         </image>
      </ImageView>
      <Label layoutX="129.0" layoutY="302.0" prefHeight="19.0" prefWidth="140.0" text="Week train schedule" AnchorPane.bottomAnchor="4.0" AnchorPane.leftAnchor="129.0" AnchorPane.rightAnchor="128.0" />
   </children>
</AnchorPane>
  • Вопрос задан
  • 247 просмотров
Решения вопроса 2
Beshere
@Beshere
Разработчик
При запуске приложения Java не видит библиотеки javafx, а при компилировании видит.

Разбирайтесь с этим. Можно напрямую при запуске указать в параметре classpath путь к javafx.
Ответ написан
Комментировать
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
IDE идет со своей jdk\jre внутри и из под нее все работает.
У вас в ОС по умолчанию установлен openjdk который не умеет javafx из коробки. В openjdk поддержка javafx появится только в 9 версии, точно не помню. Сейчас для решения проблемы ставьте 9 версию или openjfx или oracle jre\jdk.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MarkusEfr Автор вопроса
В библиотеках проекта javafx присутствует, думал должна быть и вместе с работающей программой в таком случае. Или у клиента должен быть точно установлен подходящий jdk? 5b615f1d7979d527223631.png
Установил jdk8 с которым компилировал и программа стала работать. Спасибо.
5b61b11f9da56786455849.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы