X11 DISPLAY変数が設定されていない」問題の解決方法
1. スクリーンショット機能がwindowsで動作していることを確認したので、linuxにデプロイしてみました
2. 実行後、エラー "No X11 DISPLAY variable was set, but this program performed an operation that requires it.
それは、HeadlessToolkit.getScreenSize()関数です。
3. Baidu、理由はおそらくわかっているはずです。一番の問題は、linuxの仕組みです。モニターが接続されているか、GUI出力があるか、確認する必要がありますね。それから、正しい出力先を指定する必要があります。
では、この線に沿って。
(1) javaプログラムの起動時に -DJava.awt.headless=true パラメータ
(2) Linuxの起動ファイル/etc/profileに追加する。 エクスポート DISPLAY=ローカルホスト:0
その結果、別のエラーが報告されました。スレッド "main" java.awt.HeadlessException で例外が発生しました。
4. 私たちのプログラムは、GUI出力でLinux上で実行されていることを考慮すると、次のようになります。
DJava.awt.headless=trueを指定します。
は適切でない可能性があります。
に変更します。 -DJava.awt.headless=false で、Java プログラムを再起動しました。スクリーンショットが出力可能であることを確認しました。
<スパン 5.非常に満足して、マシンを再起動し、再度スクリーンショットを実行すると、また失敗していることがわかりました。しかも、ログには何も出力されていません。何が起こったのでしょうか?
6 成功例と失敗例の違いを比較する。一つはコマンドライン起動後にプログラムを開始し、一つはブート後にバックグラウンドで勝手に起動する。その違いです。
前者のスクリーンショットは問題なく動作します。もしかしたら、まだ正しいGUIインターフェイスを取得していないのかもしれません。でも、環境変数で明確に設定されています。
<スパン 何が違うの?
7.環境変数の設定を、javaプログラムが起動する前に実行するように調整してみた。(shファイル内)を調整してテストしたところ、再起動後に実際にスクリーンショットが動きました。
その理由は何か。変更された書き込みで、確実に DISPLAY=ローカルホスト:0 が実行されてから、javaプログラムが実行されます。しかし、以前の書き方では するのはシステムログインで、環境変数
この処理は、javaプログラム自体を起動する処理とは非同期である。そのため、javaプログラム起動後に環境変数が代入されていない可能性が高いです。その結果、GUIインターフェイスが見つからないということになります。
こちらは私個人の分析です。
山あり谷ありだったのが、ようやく解決しました。経験値も獲得
関連
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
無効なメソッド宣言
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
代入の左辺は変数でなければならない 解答
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
FTPサーバ機能のJava実装
-
Javaジェネリックの深い理解
-
ロンボク版問題による血の海を思い出せ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Javaでよくある構文エラー
-
javaの非静的メソッドを静的に参照することができない
-
Java の switch case 文で必要な定数式の問題の解決法
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
WatchDog + Redisによる分散ロック
-
Java上級(XLVI) ArrayList、Vector、LinkedListの類似点と相違点を簡単に説明できる。
-
MySQLIntegrityConstraintViolationException、解決方法