クライミングジム予定地

伏見(丹波橋-桃山御陵間)に作る計画だったクライミングジムですが、予定地の間口が7cm足りないという問題を解決できなそうです。

南の向島か宇治方面に建物を探してそちらに1号店を出すのを先にしようと思います。建物探す時間はかかるけど、建築するよりは早いのでオープン時期は計画より前倒しで。

なお、伏見は予定地が空いたら開店予定としばらく先になりそうです。

さくらのVNCコンソール

FirefoxでVPSのisoインストールを行おうとしたところ途中で起動するはずのVNCコンソールが起動しなかった。試しに、リモートコンソールの右にあるVNCコンソールリンクをクリックしてみても”Server returned status code 0”と怒られた。

必要となるJREはインストールしているはずだと思いつつ「ツール->アドオン->プラグイン」とみていくと「Java TM Platform ~」が入っていない。

インストール&Firefox再起動で解決。

 

JavaFXが悪さして長い間プラグインなかったのかな??

BackWPup失敗

BackWPupのJobを走らせたら

 

“The HTTP response test get an error “Peer certificate cannot be authenticated with known CA certificates”

と怒られてバックアップがうまくいかなかった。

オレオレ証明書の期限が切れている状態なのでそのせいかな??

メッセージはオレオレだからと言っているけど仕様変わったらもっと騒いでいる人多そうだし。

->12/26追記

残念ながらメッセージ通り自己認証局はだめだった

 

 

JavaFXの非同期処理中に画面を閉じたら。。。。

バックグラウンドでタスクを動かしている状態でJavaFXの画面を閉じる。

閉じる

すると、裏で走っていたTaskが終わった後もなんか生き残っている。

残骸

 

環境は1.7.0_45に入っているjfxrt.jarでEclipse実行。

ソースは下の感じ。

    @FXML
    private void handleExecAction(ActionEvent event) {
        this.logger.info("start");
        try {
            analizeTask = getAnalizeTask();
            pgBar.progressProperty().unbind();
            pgBar.progressProperty().bind(analizeTask.progressProperty());
            pgLabel.textProperty().bind(analizeTask.messageProperty());
            final ExecutorService exe = Executors.newSingleThreadExecutor();
            exe.submit(analizeTask);

    private Task<String> getAnalizeTask() {
        return new Task<String>() {
            @Override
            protected String call() throws Exception {
                logger.info("start");
                try {

 

とりあえずは、

  1. Applicationクラスにコントローラー持たしておいて
  2. stopメソッドからコントローラーの終了メソッドを呼んで
  3. その中からTaskのcancel呼んで
  4. Taskのキャンセルイベントのハンドラー内で強制終了かけてやる

で回避。

Task内の終了処理をきちんとやろうとするといろいろはまりそうですが。

 

1

    private FXMLController controller;

    @Override
    public void start(Stage stage) throws Exception {

        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Scene.fxml"));
        Parent root = (Parent) fxmlLoader.load();
        controller = (FXMLController) fxmlLoader.getController();

2

    @Override
    public void stop() throws Exception {
        controller.destroy();
    }

3

public class FXMLController implements Initializable {    
    public void destroy() {
        if (analizeTask != null)
            analizeTask.cancel();
    }

4

            analizeTask.addEventHandler(WorkerStateEvent.WORKER_STATE_CANCELLED,
                    new EventHandler<WorkerStateEvent>() {
                        @Override
                        public void handle(WorkerStateEvent t) {
                            exe.shutdown();
                        }
                    });

JavaFXでFXMLを使った際のApplicationからcontrollerへのアクセス

FXMLクラスで”fx:controller”(シーンビルダーだとデフォルトで入っているはず)を指定しておいてアプリケーションクラスでFXMLLoader#getControllerを呼べばコントローラを取得できるのであとはごにょごにょすればOK。

注意点は、FXMLLoader#loadを呼んだ後でないとFXMLLoader#getControllerが取得できない(nullになる)こと。

 

(FXML)

<AnchorPane id="AnchorPane" prefHeight="427.0" prefWidth="423.5" 
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="jp.co.epea.FXMLController">
    <children>
        <VBox fx:id="vBox"

 

(Applicationクラス)

public class MainApp extends Application {

  private FXMLController controller;

    @Override
    public void start(Stage stage) throws Exception {

        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Scene.fxml"));
        Parent root = (Parent)fxmlLoader.load();
        controller = (FXMLController) fxmlLoader.getController();

 

 

Excel形式の列名に変換

列のインデックスをExcelの列名(AからZでAAに続くやつ)に変換する処理。時々使うのでメモかねて。

colIndexの0がA。

    private static final Character[] COL_STRING = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

    public static String toExcelCol(int colIndex) {

        StringBuilder sb = new StringBuilder();
        while (true) {
            int div = colIndex / 26;
            int mod = colIndex % 26;
            sb.insert(0, COL_STRING[mod]);
            if (div == 0)
                break;
            colIndex = div - 1;
        }

        return sb.toString();
    }

colIndexマイナスのチェックなかったりとかとかは適宜修正で。

クライミングジム新しい予定地も。。。

伏見桃山と丹波橋の間に作る予定のボルダリングジムですが、京都市の条例にかかり現状の敷地だと間口が7cm不足するという事態になりました。

敷地の交渉始める段階ですがうまくいかなかったら、まずはもう少し南の向島あたりか宇治あたりに1号店を建てるようになるかもしれません。

ざっくりした図面なのでそっちが間違えているかもしれませんが。。

 

 

JStyleがエラー

昨日エクリプス(4.3)をアップデートしてからJStyleがエラー。エラー内容は以下。

java.lang.NoClassDefFoundError: org/eclipse/swt/graphics/GC$JStyleSWTBridge
    at jp.sourceforge.mergedoc.jstyle.JStylePlugin.applySWT(JStylePlugin.java:89)
    at jp.sourceforge.mergedoc.jstyle.JStylePlugin.earlyStartup(JStylePlugin.java:81)
    at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87)
    at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2551)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.graphics.GC$JStyleSWTBridge cannot be found by jp.sourceforge.mergedoc.jstyle_4.3.0.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

java.lang.NoClassDefFoundError: org/eclipse/swt/graphics/GC$JStyleSWTBridge
    at jp.sourceforge.mergedoc.jstyle.JStylePlugin.applySWT(JStylePlugin.java:89)
    at jp.sourceforge.mergedoc.jstyle.JStylePlugin.earlyStartup(JStylePlugin.java:81)
    at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87)
    at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2551)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.graphics.GC$JStyleSWTBridge cannot be found by jp.sourceforge.mergedoc.jstyle_4.3.0.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

 

JStyleSWTBridgeというクラスがないと言っている。

Eclipseアップデートした際にあまり注意していなかったけど4.3.0から4.3.1に上がっていて、(Pleiadesにもともと入っていた)JStyle用にカスタマイズされたjarが上書きされてエラーをはいている状況っぽい。

JStyleのページから4.3.1用のものを落としてきて、プラグインフォルダに上書き&4.3.0のJStyle(※)を削除

-clean付きで起動したらOK

自分の環境はWindows7 64bitだけどどのOSでも似たような事象だと思う。

 

propedit(プロパティエディタ)とSysdeo Tomcatが警告残っているので、4.3.1に上げた影響で他にもところどころ直す必要が出てくるかも。

 

※以下のJar

jp.sourceforge.mergedoc.jstyle_4.3.0.0.jar
org.eclipse.swt.win32.win32.x86_64.source_3.102.0.v20130605-1544.jar
org.eclipse.swt.win32.win32.x86_64.source_3.102.0.v20130605-1544.jar.backup
org.eclipse.swt.win32.win32.x86_64_3.102.0.v20130605-1544.jar.backup

 

 

eclipseのglassfish用プラグイン

Eclipseのアップデートを行ったところ「http://dlc.sun.com.edgesuite.net/glassfish/eclipse/kepler/ のリポジトリーが見つかりません。」と怒られた。

 

アドレス少し削って

http://dlc.sun.com.edgesuite.net/glassfish/eclipse/

とすると

Attention – GlassFish plugins will be distributed exclusively as part of the OEPE package.

To get information about OEPE, please visit OEPE page on OTN.

と出てきました。

少し前にtwitterで言ってたかも。。

 

というわけでプラグインから削除