2010年6月27日日曜日

JavaScript on Java で Swing してみた

コードを書きまくって指が痛くなり、
もっとサボらなくちゃいけないと思い、
Javaの代わりにスクリプト言語で書くという選択肢にたどり着く。

「Javaの代わりにスクリプト」 == 「Groovy」 かなぁ?

「Javaの代わりにスクリプト」 == 「JRuby」 かなぁ?

そうこうしているうちに、Scripting for Java Platform。こんな機能、知りませんでした。


JS.java
import java.io.FileReader;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class JS {
    public static void main(String[] args) throws Exception {
        ScriptEngineManager m = new ScriptEngineManager();
        ScriptEngine e = m.getEngineByName("js");
        FileReader source = new FileReader("swing.js");
        try {
            e.eval(source);
        } finally {
            source.close();
        }
    }
}

swing.js
importPackage(java.awt);
importPackage(java.awt.event);
importPackage(javax.swing);

var frame = new JFrame("Sample");
frame.setLayout(new FlowLayout());

var button = new JButton("OK");

button.addActionListener(new ActionListener({
  actionPerformed: function(event) {
    JOptionPane.showMessageDialog(frame, "JavaScript on Java で Swing");
  }
}));

frame.add(button);

frame.setSize(100, 100);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setVisible(true);


参考
言語の中の言語 - Scripting
スクリプティング機能

ところで、スクリプト言語に換えたところで指の痛みは軽減できないことに気がついた。
「スクリプト使う→打鍵数が減る→プログラムが早くできあがる」だけだった
別ののサボり方を探そう。

2010年6月9日水曜日

Nettyと戯れてみた

Netty

まずはMaven 2.2.1 をインストール。apache-maven-2.2.1\binをPATHに追加。

Mavenでプロジェクトを作成。
C:\Users\Kei>mvn archetype:generate -DgroupId=com.blogspot.takumakei.studynetty -DartifactId=StudyNetty -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

pom.xmlにnettyを追加。
(nettyのDownloadページからコピペしたらバージョン番号がX.Y.Z.Qになっててエラー吐いた。)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.blogspot.takumakei.studynetty</groupId>
  <artifactId>StudyNetty</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>StudyNetty</name>
  <url>http://maven.apache.org</url>

  <repositories>
    <repository>
      <id>repository.jboss.org</id>
      <url>http://repository.jboss.org/nexus/content/groups/public/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.jboss.netty</groupId>
      <artifactId>netty</artifactId>
      <version>3.1.5.GA</version>
      <scope>compile</scope>
    </dependency>

  </dependencies>
</project>

Eclipseのプロジェクトファイルを生成。
C:\Users\Kei\StudyNetty>mvn eclipse:eclipse -DdownloadSource=true -DdownloadJavadocs=true

Eclipseにインポート。


EclipseのWindow > PreferencesでClasspath Variablesに
[Name] M2_REPO
[Path] C:\Users\Kei\.m2\repository
を追加。

mvnで追加できるのを後から知った。
C:\Users\Kei>mvn -Declipse.workspace="C:\Users\Kei\EclipseWorks" eclipse:add-maven-repo

Writing a Discard ServerのDiscardServerHandlerとDiscardServerを追加。


さっそくサーバを起動してつながってみる。
C:\Users\Kei>irb -rsocket
ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
require 'rubygems' -> true
require 'irb/completion' -> true
require 'pp' -> true
irb(main):001:0> c = TCPSocket.open('localhost', 12345)
=> #<TCPSocket:0x3bf1bf4>
irb(main):002:0> c.write 'hello world'
=> 11
irb(main):005:0> c.close
=> nil
irb(main):006:0>
C:\Users\Kei>

動いてる。


あとは、ドキュメント読みつつ実装するのみ。

そういえば…
Maven2.0.11かMaven2.2.1のどっちを使うべきか迷ったので両方インストールしてみた。
情報が少ないかもしれないけど、これまでMavenに依存してなかったから新しい方(2.2.1)を選んだ。

環境はWindows 7 Pro x64にJDK1.6.0_20