質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • Java

    16124questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1959questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • JavaFX

    468questions

    JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

JavaとJavaFXの連動について

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 62

dish

score 7

前提・実現したいこと

JavaプログラムとJavaFXで作成したGUIを繋げたい

現在、指定したフォルダ下の複数ファイルを圧縮するプログラムを作成しています。
プログラム自体はeclipseを用いてJavaで書いたのですが、他の人が簡単にプログラムを動かせるように、圧縮元のファイルアドレスや圧縮先のフォルダアドレスなどを入力出来るGUIでプログラムを動かしたいと考えています。
GUIはeclipseからJavaFXプログラムを作成→scene builderを起動して作成しました。

その後、JavaFXとJavaを連動させて(JavaFXのTextFiledで読み込んだ値をJavaに引き渡すなど)プログラムをGUIで動かそうと思ったのですが、調べてみたところJavaとJavaFXは完全に独立していた言語で、変数の参照などは出来ないように読み取れたんですが実際にそうなんでしょうか?

また、その場合Javaプログラムの中身自体をJavaFXで書き直す必要があると思うのですが、TextFiledで読み込んだ値を変数に納めてプログラム内で計算に使うにはどのようにすればいいのか、サイトを探してもまだ見つけられていないので参考になるようなサイトがあれば教えて頂きたいです。

よろしくお願い致します。

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;

public class a {
    public static void main(String[] args) {

        try {    //最後にfinally節でclose処理したい(出来ない)

    //////////保存先のディレクトリの作成
            //    Windows Vista 以降での仕様(UAC)でシステムルートドライブ(C:\)には書き込めない(管理者権限の昇格が必要)のでとりあえずD:に作成
            //"D:\\test"にするとファイル名が\\testになる

            System.out.println("新しく作成するディレクトリのアドレスを入力してください。");

            //Scannerで入力を受け付け

            Scanner scan1 = new Scanner(System.in);

            //nextメソッドで入力された文字の読み取り
            //nextは文字を文字列として読み込み、nextIntは数値として読み込み
            String str1 = scan1.next();

            System.out.println("入力されたアドレス:" +  str1 + "");
            //scan1.close();

            //Fileクラスのオブジェクトを生成
            File newdir = new File(str1);

            if(newdir.exists()) {
              System.out.println("既に存在しているディレクトリです");
            }else if (newdir.mkdir()){
              System.out.println("ディレクトリの作成に成功しました");
            }else{
              System.out.println("ディレクトリの作成に失敗しました");
            }        


            //File newdir = new File("D:\\test\\sub");

            //if (newdir.mkdir()){
              //System.out.println("ディレクトリの作成に成功しました");
            //}else{
              //System.out.println("ディレクトリの作成に失敗しました");
            //}            


    /////////ファイルのコピー    
            System.out.println("ログファイルのあるアドレスを入力してください");
            //Fileクラスのオブジェクトを作成
            Scanner scan2 = new Scanner(System.in);
            String str2 = scan2.next();
            System.out.println("入力されたアドレス:" +  str2 + "");


            File dir = new File(str2);
            //listFiles:指定したディレクトリに含まれるファイルやディレクトリを配列で返す
            File[] list = dir.listFiles();

            //nullチェック
            //listfilesは指定したパス名がディレクトリを示さない場合や入出力エラーが発生した場合にnullを返す
            //null状態のままオブジェクト配列を参照するとjava.lang.NullPointerExceptionの例外が発生
            if(list != null) {
                //読み込んだファイルやディレクトリの数を表示
                System.out.println("OK");
            } else {
                System.out.println("null");
            }

            //最終更新日時表示書式
            //SimpleDateFormat(String)で指定されたパターン、デフォルトのロケール、日付フォーマット記号を持つ、オブジェクトを生成
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

            //CalendarクラスやDateクラスは月を0~11で表すため一カ月ずれる!!
            //日時の設定
            Calendar start = Calendar.getInstance();
            System.out.println("取得したいログの開始時間を入力してください(年、月、日、時間、分、秒)");
            int scanstart[] = new int[6];
            Scanner scst = new Scanner(System.in);
            for(int i = 0; i < scanstart.length; i++) {
                scanstart[i] = scst.nextInt();
            }
            //scst.close();

            //start.set(2019, 4, 8, 6, 00, 00);
            start.set(scanstart[0],scanstart[1],scanstart[2],scanstart[3],scanstart[4],scanstart[5]);

            //日時の設定
            Calendar end = Calendar.getInstance();
            System.out.println("取得したいログの終了時間を入力してください(年、月、日、時間、分、秒)");
            int scanend[] = new int[6];
            Scanner scend = new Scanner(System.in);
            for(int i = 0; i < scanend.length; i++) {
                scanend[i] = scend.nextInt();
            }
            //sced.close();

            //end.set(2019, 4, 8, 12, 00, 00);
            end.set(scanend[0],scanend[1],scanend[2],scanend[3],scanend[4],scanend[5]);

            for (int i=0; i<list.length; i++) {

                // ファイルの最終更新日時(タイムスタンプ)を取得
                // 1970年1月1日0時0分0秒からの経過ミリ秒
                long lastModified = list[i].lastModified();

                //最終更新日時書式整形
                //String lastModifiedStr = sdf.format(lastModified);

                System.out.println(list[i]);
                //System.out.println(lastModifiedStr);

                //ファイルのコピー
                Path sourcePath = Paths.get(list[i].getPath());
                Path destinationPath = Paths.get(str1 + "\\" + list[i].getName() + ".txt");

                //あsファイルの更新日時をlong型からCalendar型に変換
                Calendar source = Calendar.getInstance();
                    //setTimeInMillis:Calendar の現在時刻を、指定された long 値から設定
                source.setTimeInMillis(lastModified);



                //cal1.compareTo(cal2)
                //同じなら0、cal1過去・cal2(引数)が未来なら負数1、cal1が未来なら正数を返す
                int diff1 = source.compareTo(start);
                int diff2 = source.compareTo(end);

                if(diff1 > 0 && diff2 < 0) {
                //ファイルのコピー
                    try {
                        Files.copy(sourcePath,destinationPath);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                //c_zip.zip(
                        //"D:\\test\\subzip.zip", "sourcePath");


            }
            //Zip化:ファイルの更新日時がプログラムの更新日時を上書きしてる
            ZipCompressUtils.compressDirectory("D:\\test\\subzip.zip", str1);



        } finally {
            //scend.close();
        }
    }

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • asahina1979

    2019/06/15 20:07

    連携云々よりスコープを勉強してからのほうがいいかと
    JavaFX(ライブラリ)

    キャンセル

まだ回答がついていません

同じタグがついた質問を見る

  • Java

    16124questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1959questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • JavaFX

    468questions

    JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。