2011-01-19 4 views
1

Windows에서 Exe4J를 사용하여 Java 응용 프로그램을 시작합니다. 이것은 다음과 같은 장점이 있습니다Linux - Java 응용 프로그램 시작 화면

  • 응용 프로그램이 어리 석음로드 될 때까지 자바 ("플럭스 보상 초기화", 시작시 시작 화면에 라벨을 업데이트
  • 가능성을 시작하기 전에 보여줍니다 스플래시 스크린, "높은 순서 변경 nibbles "등)

이제 이것을 Linux에서 구현하고 싶습니다. 쉘 스크립트를 사용하여 응용 프로그램을 시작하지만 시작할 때 내 쉘 스크립트에서 업데이트 할 수있는 레이블이있는 스플래시 GUI를 표시하는 쉬운 방법을 좋아합니다.

쉘 스크립트에서 최소한의 GUI를 실행하고 쉘 스크립트에서 레이블을 업데이트 할 수있는 쉬운 방법이 있나요? linux (Mac OS X의 경우조차도) 용으로 별도의 실행 파일을 컴파일하지 않아도됩니다.)?

추 신 : 동적으로 업데이트해야하는 Label 때문에 스플래시 화면에서 Java 빌드를 사용하고 싶지 않습니다.

답변

3

화면 시작을위한 표준 Java 1.6 솔루션은 시작 Screensplash Tutorial에 그리기 사용자 정의 지원하지 않습니다.

다음은 기본 메소드가있는 스플래시 컨트롤러의 예입니다. 스플래시 매개 변수로 실행하여 결과를 확인합니다.

package somepackage; 
import java.awt.AlphaComposite; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.FontMetrics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.SplashScreen; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.geom.Rectangle2D; 

public class SplashController implements ActionListener { 
    private static final int X = 20, W = 300; 
    private static final int TEXT_H = 10, BAR_H = 10; 

    private int textY, barY; 
    private int barPos = 0; 

    private final SplashScreen splash; 
    private Graphics2D graph; 

    public SplashController(final int msgXOffset, final int msgYOffset) { 
    splash = SplashScreen.getSplashScreen(); 
    if (splash == null) { 
     System.out.println("Error: no splash image specified on the command line"); 
     return; 
    } 

    // compute base positions for text and progress bar 
    final Dimension splashSize = splash.getSize(); 
    textY = splashSize.height - msgYOffset; 
    barY = splashSize.height - msgYOffset; 

    graph = splash.createGraphics(); 
    //timer.start(); 
} 

public SplashController() { 
    this(30, 30); 
} 

@Override 
public void actionPerformed(final ActionEvent e) { 
    drawSplashProgress(msg); 
} 

public void closeSplash() { 
    if (splash != null) { 
     splash.close(); 
    } 
} 

private String msg; 

public void drawSplashProgress(final String msg) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      SplashController.this.msg = msg; 
      graph.setRenderingHint(RenderingHints.KEY_INTERPOLATION,        RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
      graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
      graph.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
      graph.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 

      // clear what we don't need from previous state 
      graph.setComposite(AlphaComposite.Clear); 

      final FontMetrics fm = graph.getFontMetrics(); 
      final Rectangle2D textsize = fm.getStringBounds(msg, graph); 

      graph.fillRect(X, textY - 1, W, (int) textsize.getHeight() + 5); 
      if (barPos == 0) { 
       graph.fillRect(X - 3, barY, W + 10, BAR_H); 
      } 

      // draw new state 
      graph.setPaintMode(); 

      // draw message 
      graph.setColor(Color.BLACK); 
      graph.drawString(msg, X, textY + TEXT_H); 
      try { 
       splash.update(); 
      } catch (final IllegalStateException e) { 
       // can be ignored 
      } 
     } 
    }); 
} 

public static void main(final String args[]) throws Exception { 
    final SplashController test = new SplashController(); 
    for (int i = 0; i < 50; i++) { 
     test.drawSplashProgress("Progress step number " + i); 
     Thread.sleep(250); 
    } 
    test.closeSplash(); 
} 
} 
+0

+1 아, 아직이 해결책에 대해 몰랐습니다. 정말 내 문제에 대한 해결책이 될 수 있습니다. 조사 할게 ... – Daniel

1

이클립스 시작 프로그램은 모든 플랫폼에서이 기능을 지원하지만 SWT 로의 이전이 너무 어려울 수 있습니까? 세부 사항은 here입니다.

+0

어쨌든 SWT를 사용하므로 문제가되지 않습니다. Eclipse 실행기를 정확히 구성 할 수 있는지 알지 못했습니다! – Daniel

0

스크립트에서 Python (또는 GUI 기능을 제공하는 다른 스크립팅 언어)을 사용할 수 있습니다.

http://docs.python.org/faq/gui.html

+0

okey,하지만 파이썬이나 TCL, 또는 이것에 대한 새로운 언어를 배우고 싶지는 않으며 내 프로그램에도 파이썬 의존성을 추가하고 싶지 않습니다. – Daniel

관련 문제