私は自分で試していませんが、Windowsでは、コンソールのタイトルを変更するためにWin32 APIコールをSetConsoleTitle
にすることができます。
しかし、これはネイティブライブラリの呼び出しであるため、呼び出しを行うにはJava Native Interface (JNI)のようなものを使用する必要があります。これはWindows 2000以降でのみ有効です。
編集 - 次JNI
を使用してソリューションは、WindowsでのJavaのコンソールウィンドウのタイトルを変更するために、JNIを使用した例です。これを実装するために、事前準備は、Cとコンパイラ/リンカーの使用に関する知識です。
まず、ここでの結果です:
Changing the console title from a Java application http://coobird.net/img/jni-change-console-title.png
免責事項:これは、JNIを使用して私の最初のJavaアプリケーションですので、おそらく、それを使用する方法の良い例であることをつもりはない - 私はしないでくださいすべてのエラーチェックを実行し、私はいくつかの詳細が欠落している可能性があります。
Javaプログラムは、以下の通りであった:
class ChangeTitle {
private static native void setTitle(String s);
static {
System.loadLibrary("ChangeTitle");
}
public static void main(String[] args) throws Exception {
for (int i = 0; i < 5; i++) {
String title = "Hello! " + i;
System.out.println("Setting title to: " + title);
setTitle(title);
Thread.sleep(1000);
}
}
}
基本的には、タイトルがChangeTitle
と呼ばれる外部のネイティブライブラリでsetTitle
ネイティブメソッドを呼び出すことにより、5秒ごとに変更されます。
ChangeTitle.class
ファイルを作成するために上記のコードをコンパイルすると、javah
コマンドを使用してCライブラリを作成するときに使用されるCヘッダーが作成されます。javah
によって生成されるCヘッダ・ファイルに対してCのソースコードを書く伴いますライブラリを書くネイティブライブラリ
を書く
。
ChangeTitle.h
ヘッダは以下た:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class ChangeTitle */
#ifndef _Included_ChangeTitle
#define _Included_ChangeTitle
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: ChangeTitle
* Method: setTitle
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_ChangeTitle_setTitle
(JNIEnv *, jclass, jstring);
#ifdef __cplusplus
}
#endif
#endif
次に、インプリメンテーション、ChangeTitle.c
:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <jni.h>
#include "ChangeTitle.h"
JNIEXPORT void JNICALL
Java_ChangeTitle_setTitle(JNIEnv* env, jclass c, jstring s) {
const jbyte *str;
str = (*env)->GetStringUTFChars(env, s, NULL);
SetConsoleTitle(str);
(*env)->ReleaseStringUTFChars(env, s, str);
};
ネイティブ関数に渡されるString
がUTF-8でエンコードされたCに変更されます文字列はSetConsoleTitle
functionに送信されます。これは、関数名が示唆するように、コンソールのタイトルを変更します。
(注:SetConsoleTitle
関数に文字列を渡すだけで問題はあるかもしれませんが、ドキュメントに従って、Unicodeも受け入れます。さまざまな文字列で送信します)。
上記は、基本的にMSDNのSection 3.2: Accessing Strings,The Java Native Interface Programmer's Guide and SpecificationおよびSetConsoleTitle
Functionページのサンプルコードの組み合わせです。
エラーチェックを含むより複雑なサンプルコードについては、Section 3.2: Accessing StringsおよびSetConsoleTitle
Functionページを参照してください。 DLL
私は実際にUnsatisfiedLinkError
を発生させることなく読み取ることができるDLLにコンパイルするためにCのファイルを取得して把握するためにほとんどの時間を要することが判明一部を構築
。
検索や物事をしようと、多くの後、私は、Javaから呼び出すことができDLLにコンパイルするCソースを取得することができました。 MinGWを使用しているので、mingw.org
のページフォームdescribed exactly how to build a DLL for JNIが見つかりました。
出典:
JNIをやっているすべての努力を費やさずに、https://jna.dev.java.net/に行きましょう。 JNIよりもJNAを使う方がずっと簡単です。これはPythonのctypes以来最高のものです。 – paxdiablo