プラットフォーム固有のアプリケーションデータ領域へのアクセス

シュトゥルム

Javaでは、再起動の間に利用できるように、いくつかのデータをローカルに保存する方法を見つける必要があります。ウィンドウの場所/サイズなどの単純なもの。このような情報は通常C:\Users\<username>\AppDataWindowsに保存されいることは知っていますが(%APPDATA%Windowsエクスプローラーのアドレスバーに入力してアクセスします)、Mac OS Xのどこに保存されているのかわかりません(補足として、まだわかりません)その構造%APPDATA%の持つWindows上のフォルダ、\Roaming\Local\LocalLow、などのサブフォルダ。)

確かに、OSによっては、ウィンドウの場所などの情報をこれらの領域に保存する方法がいくつかあります。おそらく、これらの比較的ユビキタスなタスクを実行するためにすでに構築されたライブラリさえありますか?

dic19

Javaでは、再起動の間に利用できるように、いくつかのデータをローカルに保存する方法を見つける必要があります。ウィンドウの場所/サイズなどの単純なもの。

PreferencesAPIはこの要件に適していると思います。一言で言えば:

アプリケーションには、さまざまなユーザーや環境のニーズに適応するための設定データと構成データが必要です。このjava.util.prefsパッケージは、アプリケーションがユーザーとシステムの設定および構成データを保存および取得する方法を提供します。データは、実装に依存するバッキングストアに永続的に保存されます。プリファレンスノードには、ユーザープリファレンス用とシステムプリファレンス用の2つの別個のツリーがあります。

ここには、短くて便利なチュートリアルがありますそして、ここにあなたの要件に基づいた小さな例があります:

import java.util.prefs.Preferences;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class SwingPreferencesTest {

    private void createAndShowGUI() {

        JTextField dummyTextField = new JTextField(20);

        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(dummyTextField);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        Preferences prefs = Preferences.userRoot().node(this.getClass().getName());

        // Define default values here
        System.out.println("width: " + prefs.getDouble("width", 100d));
        System.out.println("height: " + prefs.getDouble("height", 100d));
        System.out.println("x: " + prefs.getDouble("x", 0d));
        System.out.println("y: " + prefs.getDouble("y", 0d));

        // Set new values here
        prefs.putDouble("width", frame.getPreferredSize().getWidth());
        prefs.putDouble("height", frame.getPreferredSize().getHeight());
        prefs.putDouble("x", frame.getLocationOnScreen().getX());
        prefs.putDouble("y", frame.getLocationOnScreen().getY());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new SwingPreferencesTest().createAndShowGUI();
            }
        });
    }
}

初めて実行すると、コンソールに設定のデフォルト値が表示されます。

width: 100.0
height: 100.0
x: 0.0
y: 0.0

再度実行すると、これらの値が更新されます。私の場合:

width: 240.0
height: 59.0
x: 130.0
y: 130.0

編集

以下の@Puceのコメントによると、Windowsのデータはレジストリに保存されます。これは、Windowsがユーザー/システム/ソフトウェアデータを保存するために使用する方法であるため、理にかなっています。HKEY_CURRENT_USER\JavaSoft\Prefs\[package\class name]次の図に示すように、下の例で生成されたレジストリエントリを見つけることができます

ここに画像の説明を入力してください

注: Windows 8 x64、JDK1.7でテスト済み

レジストリにこれらの設定を入力したくない場合は、(他のアプリケーションと同様に)アプリケーションフォルダーへのパスを保存し、このパスを使用してプレーンプロパティファイルから構成データを読み込むことができます。プリファレンスを使用し続ける(少なくともアプリケーションのパスを保存する)主な利点は、構成データを取得/保存するメカニズムがクロスプラットフォームになるように設計されており、JVM実装者(開発者ではない)が実際の実装を処理する必要があることです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プラットフォーム固有のアプリケーションデータ領域へのアクセス

分類Dev

アプリケーション固有のアイテム(API、データベースモデルなど)とプラットフォーム固有のアイテムを分離することは良い考えですか

分類Dev

Apache Tomcatアプリケーションのデフォルトのセッションタイムアウト

分類Dev

.NET Core1.1でアプリケーションデータのディレクトリを取得するクロスプラットフォームの方法

分類Dev

システム固有のデフォルトアプリをフラッターで開く方法は?

分類Dev

クロスプラットフォームアプリケーション用のXamarinFormsのsqliteデータベースに画像を保存する方法は?

分類Dev

クロスプラットフォームデスクトップアプリケーション-Windows + Mac + Linux

分類Dev

バックグラウンドのAndroidサービスからアプリケーション固有のモーションデータを取得する

分類Dev

クロスプラットフォームアプリケーションの設計と単体テスト

分類Dev

PHPアプリケーションフォーム-固有の電子メールエラー

分類Dev

Windowsフォームアプリケーションのフレームワークライセンス

分類Dev

デスクトップアプリケーション用のJava SwingまたはWindowsフォーム?

分類Dev

ローカルアプリケーションデータディレクトリへのパスを取得するクロスプラットフォームの方法は何ですか?

分類Dev

EJB 3:アプリケーションクライアントからステートフルセッションBeanへのアクセス

分類Dev

クロスプラットフォームアプリケーション用のJavaFX 2.0およびQt

分類Dev

クロスプラットフォームアプリケーションの作成

分類Dev

クロスプラットフォームのjavaFXアプリケーションを生成できません

分類Dev

URLを介したデスクトップアプリケーションへのアクセス

分類Dev

クロスプラットフォームのxamarinアプリケーションとネイティブライブラリバインディング

分類Dev

GTK3ベースのアプリケーションのデフォルト(灰色)テーマの黒い領域

分類Dev

フレームワークでのアプリケーション固有のインジェクション

分類Dev

マルチプロセスアプリケーションのSQLiteアップデートフック

分類Dev

UWPプラットフォームのXAMLシステムリソースへのアクセス

分類Dev

UWPプラットフォームのXAMLシステムリソースへのアクセス

分類Dev

Windowsフォームアプリケーションのチェックボックスのレイアウト

分類Dev

Golangでのプラットフォーム固有の逆シリアル化?

分類Dev

次の基準に基づいてデスクトップアプリケーションを開発する言語/プラットフォーム

分類Dev

C#アプリケーションのアプリケーション/フォームデータ?

分類Dev

クリックワンスデプロイメント用のWindowsAzureストレージコンテナへのWindowsフォームアプリケーションの公開エラー

Related 関連記事

  1. 1

    プラットフォーム固有のアプリケーションデータ領域へのアクセス

  2. 2

    アプリケーション固有のアイテム(API、データベースモデルなど)とプラットフォーム固有のアイテムを分離することは良い考えですか

  3. 3

    Apache Tomcatアプリケーションのデフォルトのセッションタイムアウト

  4. 4

    .NET Core1.1でアプリケーションデータのディレクトリを取得するクロスプラットフォームの方法

  5. 5

    システム固有のデフォルトアプリをフラッターで開く方法は?

  6. 6

    クロスプラットフォームアプリケーション用のXamarinFormsのsqliteデータベースに画像を保存する方法は?

  7. 7

    クロスプラットフォームデスクトップアプリケーション-Windows + Mac + Linux

  8. 8

    バックグラウンドのAndroidサービスからアプリケーション固有のモーションデータを取得する

  9. 9

    クロスプラットフォームアプリケーションの設計と単体テスト

  10. 10

    PHPアプリケーションフォーム-固有の電子メールエラー

  11. 11

    Windowsフォームアプリケーションのフレームワークライセンス

  12. 12

    デスクトップアプリケーション用のJava SwingまたはWindowsフォーム?

  13. 13

    ローカルアプリケーションデータディレクトリへのパスを取得するクロスプラットフォームの方法は何ですか?

  14. 14

    EJB 3:アプリケーションクライアントからステートフルセッションBeanへのアクセス

  15. 15

    クロスプラットフォームアプリケーション用のJavaFX 2.0およびQt

  16. 16

    クロスプラットフォームアプリケーションの作成

  17. 17

    クロスプラットフォームのjavaFXアプリケーションを生成できません

  18. 18

    URLを介したデスクトップアプリケーションへのアクセス

  19. 19

    クロスプラットフォームのxamarinアプリケーションとネイティブライブラリバインディング

  20. 20

    GTK3ベースのアプリケーションのデフォルト(灰色)テーマの黒い領域

  21. 21

    フレームワークでのアプリケーション固有のインジェクション

  22. 22

    マルチプロセスアプリケーションのSQLiteアップデートフック

  23. 23

    UWPプラットフォームのXAMLシステムリソースへのアクセス

  24. 24

    UWPプラットフォームのXAMLシステムリソースへのアクセス

  25. 25

    Windowsフォームアプリケーションのチェックボックスのレイアウト

  26. 26

    Golangでのプラットフォーム固有の逆シリアル化?

  27. 27

    次の基準に基づいてデスクトップアプリケーションを開発する言語/プラットフォーム

  28. 28

    C#アプリケーションのアプリケーション/フォームデータ?

  29. 29

    クリックワンスデプロイメント用のWindowsAzureストレージコンテナへのWindowsフォームアプリケーションの公開エラー

ホットタグ

アーカイブ