イントロダクション
表題の様なエラーが出た時の対処をやりました。
症状:apt-get ができなくなった。。。
調査
エラーメッセージをとりあえず検索する。。。
それっぽいページを開き、詳細を見ていく。。。
色々と調べていくうちにラズパイの「LAN」を起動していないことに気がつく。。。
解決
ネットワークに接続しているかどうかの確認を行いましょう。
あと環境変数JAVA_HOMEに使っていないJDKを指定していたのでそれを削除して再起動したら治りました。
表題の様なエラーが出た時の対処をやりました。
症状:apt-get ができなくなった。。。
エラーメッセージをとりあえず検索する。。。
それっぽいページを開き、詳細を見ていく。。。
ネットワークに接続しているかどうかの確認を行いましょう。
あと環境変数JAVA_HOMEに使っていないJDKを指定していたのでそれを削除して再起動したら治りました。
初めは、CUIからJava Swingを起動したかったのですが、ちょいと時間がかかるので保留にして、GUI起動してからSwingを実行する様に変更します。
At first I woudl like to execute from CUI to Java Swing(GUI). But I need to more leaning about Swing and X. That's why I will start GUI and execute Java Swing.
最近では「JavaFX」でも画面を作成することができるので「Swing」とどちらを使用するか悩んだのですが、テクノリジー的に歴史の長い「Swing」を使用することにしました。
Swingは大雑把に以下の要素で構成されています。
画面(JFrame, JDialog, JWindow), 画面の部品(JComponent)だいたいこれらのクラスを継承したクラス群を使用して画面の作成を行います。
詳細に関してはこちらをどうぞ。
作ってみよう!(Let's get started!)
シンプルに写経をするのが一番だと思います。
mport javax.swing.*;
import java.awt.*;
public class RpiCtlMain extends JFrame {
public static void main(String[] args) {
RpiCtlMain rpi = new RpiCtlMain(args);
}
/**
* コンストラクタ(Constructor)
* インスタンスを作る処理を行う。(Create instance)
*
* 1.プログラム引数を受け取る
* [0]:タイトル
*/
public RpiCtlMain(String[] args) {
// 親クラスのコンストラクタを呼び出す
// Call constructor of parent class
super();
// JFramewを作成するこのクラスが
// JFrameを継承しているのでこのクラスを作成する
// デフォルトの画面タイトル
this.setTitle("Hello RPi Swing!");
// プログラム引数がある時
if (args.length > 0) {
// 1個目の引数をタイトルにセット
this.setTitle(args[0]);
}
// コンポーネントを追加する
Container con = this.getContentPane();
con.add(new Label("Hello Swing ! This is Label"));
// 画面サイズ
this.setSize(500, 500);
// 画面が終了したらプログラムも終了する設定
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// パック(コンポーネントのサイズに合わせる)
this.pack();
// 表示設定をする(しないと何もおきずに終了してしまう
this.setVisible(true);
}
}
実行結果です。真ん中あたりにあるのは赤字になっているコードを入れた時と入れない時の差分です。※大きい方が赤字コードを入れないケースです。
ちなみにGITリポジトリからPULLできます。
https://github.com/ZenryokuService/RpiSwing
<ラズパイ関連>
ラズパイのCUI環境にXFCE4を入れてそれのみを起動して、Javaの画面アプリを起動しようと思い色々とやったことのうちの1つです。
GUIを起動する時に使用するアプリケーションです、XServer, X11などと呼ばれています。Java Swing, OpenGLなどのアプリケーションもこのアプリに依存する形で作られている様です。
サイトを色々と調べた時に発見したものなのですが、よくよく見てみるとなかなか面白く。。。
参照サイト:https://www.raspberrypi.org/forums/viewtopic.php?t=7571
タイトルにはラズパイの起動が早くなるみたいなことが書いてありました。実際にログインなどの処理は通常のラズパイよりも早かったです。
Processingも入れていたので一緒にイメージだけですが載せておきます。
参考サイトにある通りです。
コマンド(ターミナル)を立ち上げて
Gitはローカルリポジトリとリモートリポジトリを使用します。
概要としては以下の様になります。「リポジトリ」の意味は作成してみればわかります。(笑)
1: ローカルリポジトリを作成する
2: リモートリポジトリからクローンする
3: ダウンロードできたことを確認する
1: Gitのローカルリポジトリを作る
適当なディレクトリ(フォルダ)を作成します。下はコマンド入力の例です。
「myLocalRepository」は自分で作成するローカルリポジトリになります。
$mkdir ./myLocalRepository $cd ./myLocalRepository $git init
実行後に以下の様な文言が出ます。
Initialized empty Git repository in /XXX/myLocalRepository/.git
早い話が「.git」ファイルが作成されます。
Gitからリポジトリをダウンロード(クローン)する
git clone https://github.com/ZenryokuService/rpictl.git
上のコマンドはコピペで自分の作成しているリポジトリをダウンロード(クローン)できます。
そしてJAVA_HOMEにJDKを指定します。
以下のコマンドで「bashrc」or「bash_profile」ファイルを修正します。
#パターン1 nano ~/bashrc #パターン2 nano ~/bash_profile
開いたら一番下に以下の様なスクリプトを追加します。(書くだけです)
JAVA_HOME=/usr/local/jdk1.8.0_181 PATH=$PATH:$JAVA_HOME/bin:M2_HOME/bin
作成したら以下のコマンドでbashrc(bash_profile)をリロードします。
#パターン1 source ~/.bashrc #パターン2 source ~/.bash_profile
せっかくクローンしてきたのでMavenビルドをかけてみます。
参考にしたサイトはこちらです。
ぶっちゃけてコピって適当な場所を修正しただけです。
※赤い部分が修正した部分です。
<!-- 実行可能jarファイル用のプラグイン --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> <configuration> <finalName>test</finalName> <descriptorRefs> <!-- 依存するリソースをすべてjarに同梱する --> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>main.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <!-- idタグは任意の文字列であれば何でもよい --> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
これをGitにコミット(PUSH)してからラズパイで「mvn install」で必要なファイルのインストールおよびビルドをかけます。
targetディレクトリ(フォルダ)にJARファイルが出力されているので以下のコマンドで実行します。
java -jar XXXX.jar
実行結果はまた後日!
ラズパイでJavaでの画面を表示したいがラズパイ用のJavaセットアップをしていなかったので改めてセットアップする
ラズパイには、はじめから(デフォルト)でJavaがインストールされているようですがJavaで低レベルな機能を使用しようとすると動きません。
Java言語では、低レベル(C言語に近い)機能~高レベル(リスト、可変長配列など)が使用できるので今回実装しようとしている「Swing」は「高レベルAPIになりますが基盤としているテクノロジーAWTが動かないとSwingもうごかないというわけです。
※上のリンクは「パッケージの説明」部分を参考にしてください。
「低レベル」というのは、画面表示とか、ファイルの扱いなど物理的な領域に近い部分の処理のことを言います。Networkも低レベルな領域ですが、大体通信用のライブラリが用意されているので「高レベル」に近くなります。
<例>
ラズパイ上でJVMの切り替えを行う手順を示します。
「1」にあるリンクのページに手順が記載されています。が英語です。読める人はそちらを呼んでください。
上のリンクからも移動できますが、ダウンロードページからARM用のJDKをダウンロードします。
自分はSSHで転送する手段を使用しました。
# 2.tarファイルの解凍 tar zxvf jdk-8u5-linux-i586.tar.gz -C /usr/java # 3.JVMをjavaコマンドに設定する(JVM切り替える(JDKを切り替える)) sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.7.0_10/bin/java" 1 sudo update-alternatives --set java /opt/java/jdk1.7.0_10/bin/java # 最後に確認します sudo update-alternatives --list java sudo update-alternatives --list javac #Javaを選択し直す場合は。。。 sudo update-alternatives --config java
最後の「java」の部分は「javac」に変えて確認できます。
こんな感じです。