EclipseRCP 번들 네이티브코드 사용하기.(EclipseRCP  Bundle-NativeCode)[Bundle-NativeCode,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 번들 네이티브코드 사용하기.(EclipseRCP  Bundle-NativeCode)







번들네이티브 코드는 무엇인가?



이클립스 RCP 환경에서 개발시에, 네이티브 코드 사용을 편리하게 하기위해,



manifest 파일에 사용할수 있도록 Bundle-NativeCode라는 헤더를 만들어 놨다.




어떻게 사용하는가?



예시)



LWJGL을 사용하기위해 번들화하여, 실행을 했는데,



분명 jar파일을 의존성에 추가했는데도 불구하고,아래와 같은 에러가 난다.



java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path



LWJGL 포럼을 찾아보니, 실행할때 자바 VM Arguments로 네이티브 코드의 패스를 넣어주라고 한다.



-Djava.library.path="native code path”



이때 물론 실핼할때마다 VM Arguments에 넣어줄 수도 있지만,



Manifest.MF 파일에 다음과 같이 추가해주면 같은 효과를 볼 수 있다.




Tip.



만약 No Bundle-NativeCode match 라는 에러를 만난다면? Alias를 사용하지말고 os.name 프로퍼티를 확인하여, 그대로 써보자.



If you meet error that “No Bundle-NativeCode match", recommand you just confirm os.name property and use it.



Code:



Bundle-NativeCode: native/windowslib.dll;

native/windowslib2.dll;

osname=Windows95; osname=Windows 95; osname=Win95;

osname=Windows98; osname=Windows 98; osname=Win98;

osname=WindowsNT; osname=Windows NT; osname=WinNT;

osname=WindowsCE; osname=Winndows CE; osname=WinCE;

osname=WindowsXP; osname=Windows XP; osname=WinXP;

osname=WindowsVista; osname=Windows Vista;

processor = i386; processor = x86

native/linuxlib.so;

osname=Linux; processor=x86

(processordef | osnamedef | osversiondef | languagedef)


Reference

secrets-of-bundle-nativecode

Processor aliases

OS aliases



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

EclipseRCP 사용자 정의 다이얼로그 사용하기.( EclipseRCP SWT Custom dialog)[Custom Dialog,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 사용자 정의 다이얼로그 사용하기.( EclipseRCP SWT Custom dialog)







SWT에서는 다음의 5가지 Dialog를 제공하고 있다.


  • ColorDialog
  • DirectoryDialog
  • FileDialog
  • FontDialog
  • MessageBox


하지만 필요에따라 자신만의 Dialog를 만들어 쓸 일이 생기는데..



간단한 SlideDialog의 예제로 알아보자.



Code:


private IWorkbenchWindow window;

  private Shell customDialog;

  private Button buttonOK;

  private Button buttonCancel;

  private boolean isSetting;

  private float density;

 

    private Listener listener = new Listener() {

        public void handleEvent(Event event) {

          if (event.widget == buttonOK) {

            isSetting = true;

          } else {

            isSetting = false;

          }

          customDialog.close();

          customDialog.dispose();

        }

 

      };

     

    private void initialize() {

      customDialog = new Shell(window.getShell(), SWT.APPLICATION_MODAL| SWT.DIALOG_TRIM);

    customDialog.setText("Setting Density");

    customDialog.setSize(210, 100);

   

    buttonOK = new Button(customDialog, SWT.PUSH);

      buttonOK.setText("OK");

      buttonOK.setBounds(10, 40, 80, 25);

 

      buttonCancel = new Button(customDialog, SWT.PUSH);

      buttonCancel.setText("Cancel");

      buttonCancel.setBounds(110, 40, 80, 25);

     

      final Slider slider = new Slider (customDialog, SWT.HORIZONTAL);

      slider.setBounds (10, 10, 180, 24);

      slider.setIncrement(10);

      slider.setMaximum(109);

      slider.setToolTipText("MIN <--!--> MAX");

      buttonOK.addListener(SWT.Selection, listener);

      buttonCancel.addListener(SWT.Selection, listener);

    slider.addListener (SWT.Selection, new Listener () {

      public void handleEvent (Event event) {

        density = slider.getSelection()*0.01f;

      }

    });

    }

  public void run(IAction action) {

    initialize();

    customDialog.open();

 

    // sleep during dialog work. dialog 가 닫힐때까지 기다리게 해준다.

     while (!customDialog.isDisposed()) {

          if (!window.getShell().getDisplay().readAndDispatch())

            window.getShell().getDisplay().sleep();

        }

 

     if(isSetting) {

        System.out.println("Density : "+density);

      }

  }


코드 후반의 while문 부분이 없다면, Dialog에서 어떤 조작을 하기도 전에 if문이 실행되버리니 유의해야 한다.



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

EclipseRCP 마법사 사용하기(EclipseRCP Wizard)[마법사,wizard,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 마법사 사용하기(EclipseRCP Wizard)







When you use wizard, you and users probably will be happy.

마법사를 이용하면 개발자 사용자 모두 편해 질 수 있습니다.

Wizard can have one ore more pages.

마법사는 하나 또는 여러개의 페이지를 가질 수 있습니다.

I wrote simple single page wizard code in this post.

이 포스트에는 간단하게 만들수 있는 단일 페이지 마법사 코드를 작성 해 봤습니다.



MyWizard.java


Code:



public class MyWizard extends Wizard {

 

  MyWizardPage mainPage;

 

  public MyWizard() {    

  }

 

    public void addPages() {

          super.addPages();

          mainPage = new MyWizardPage();

      addPage(mainPage);

      }

   

    public boolean performFinish() {

      if(mainpage.isActionValid()) return true;

      return false;

    }

 

  public boolean performCancel() {

    return true;

  }

}


MyWizardPage.java


Code:



public class MyWizardPage  extends WizardPage {

 

   public MyWizardPage() {

      super("pageName");

      setTitle("Title");

      setDescription("Description");

//    super(pageName,title,titleImage);

   }

 

   public void createControl(Composite parent) {

      // $begin code generated by SWT-Designer$

      Composite container = new Composite(parent, SWT.NULL);

      final GridLayout gridLayout = new GridLayout();

      gridLayout.numColumns = 3;

      container.setLayout(gridLayout);

      setControl(container);

      //add Components

    //....    

   }

 

   public void init(ISelection selection) {

   if (!(selection instanceof IStructuredSelection)) return;

   //init..

   }

 

}



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

EclipseRCP 환경설정 페이지 사용하기(EclipseRCP Preference Page)[Preference Page,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 환경설정 페이지 사용하기(EclipseRCP Preference Page)







1. add (org.eclipse.ui.preferencePages)extension to plugin.xml

- plugin.xml파일에 환경설정 확장점을 추가해준다.

2. create new class that implements IWorkbenchPreferencePage

- IWorkbenchPreferencePage를 구현한 클래스를 생성한다.

3. If you need to adjust, you can make Preference constants and Preference initializer classes.

- 필요하다면, 환경설정 상수나, 초기화 클래스관련 클래스를 생성할 수 있습니다.

범위 : 기본, 환경, 인스턴스

scopes : default , configuration , instance



Preference.java


Code:

public class PreferencePage
  extends FieldEditorPreferencePage
  implements IWorkbenchPreferencePage {
 
  public PreferencePage() {
    super(GRID);
    setPreferenceStore(Plugin.getDefault().getPreferenceStore());
    setDescription("Preferences");
  }

 

  public void createFieldEditors() {

    String[] filterExtension = { "*.file extension" };

    addField(new DirectoryFieldEditor(PreferenceConstants.DIR_PATH,         "&Directory preference:", getFieldEditorParent()));

                      FileFieldEditor filePathPrefEditor = new FileFieldEditor(PreferenceConstants.FILE_PATH,

        "&File Path preference:", getFieldEditorParent());

    filePathPrefEditor.setFileExtensions(filterExtension);

    addField(filePathPrefEditor);

    addField(

      new BooleanFieldEditor(

        PreferenceConstants.P_BOOLEAN,

        "&An example of a boolean preference",

        getFieldEditorParent()));

 

    addField(new RadioGroupFieldEditor(

        PreferenceConstants.P_CHOICE,

      "An example of a multiple-choice preference",

      1,

      new String[][] { { "&Choice 1", "choice1" }, {

        "C&hoice 2", "choice2" }

    }, getFieldEditorParent()));

    addField(

      new StringFieldEditor(PreferenceConstants.P_STRING, "A &text preference:", getFieldEditorParent()));

  }

 

  /* (non-Javadoc)

   * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)

   */

  public void init(IWorkbench workbench) {

  }

 

}

PreferenceConstants.java


Code:










public class PreferenceConstants {
  public static final String DIR_PATH = "dirPath";
  public static final String FILE_PATH = "filePath";
 
  public static final String P_PATH = "pathPreference";
  public static final String P_BOOLEAN = "booleanPreference";
  public static final String P_CHOICE = "choicePreference";
  public static final String P_STRING = "stringPreference";
}

PreferenceInitializer.java


Code:







public class PreferenceInitializer extends AbstractPreferenceInitializer {
  public void initializeDefaultPreferences() {
    IPreferenceStore store = Plugin.getDefault().getPreferenceStore();
    store.setDefault(PreferenceConstants.DIR_PATH,"C:\\Program Files");
  }
}


RadioGroupFieldEditor 사용팁

만약 아직 지원하지 않는 값을 사용자가 클릭했을 경우,

다음과 같이 propertyChange를 overriding하여 필드값을 Initializer에서 설정해준 값으로 불러와 변경시키는 방법을 사용 하면된다.



Code:

public void propertyChange(PropertyChangeEvent event) {
    super.propertyChange(event);
    if(event.getProperty().equals(FieldEditor.VALUE)) {
      if(event.getSource() instanceof RadioGroupFieldEditor) {
        if(!event.getNewValue().equals("available value")){
          Dialog.showWarningMessageDialog(getFieldEditorParent(), "Not available", "Sorry, Now available only for available value.");
          RadioGroupFieldEditor radioGroupEditor = (RadioGroupFieldEditor) event.getSource();
          radioGroupEditor .loadDefault();
        }   

      }

    }

  }



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

EclipseRCP 백그라운드잡 템플릿 (EclipseRCP Background Job Template)[Background Job,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 백그라운드잡 템플릿 (EclipseRCP Background Job Template)







Code:

Job job = new Job("Title") {
          protected IStatus run(IProgressMonitor monitor) {
           monitor.beginTask(TaskName, totalWork);
              monitor.subTask(SubTaskName);
                  monitor.worked(work);
                  if (monitor.isCanceled()){
                    return Status.CANCEL_STATUS;
                  }
//                  try { Thread.sleep(1000); } catch (Exception e) { }
                        Display.getDefault().asyncExec(new Runnable() {
                           public void run() {
                                           //  UI Update Jobs
                           }
                        });
                 
               return endJob(monitor);
            }
         };
 
//         job.setUser(true);
         job.schedule();
 
   public boolean isModal(Job job) {
          Boolean isModal = (Boolean)job.getProperty(
                                 IProgressConstants.PROPERTY_IN_DIALOG);
          if(isModal == null) return false;
          return isModal.booleanValue();
       }
   protected  Action getCompletedAction() {
      return new Action("View status") {
        public void run() {
         
          MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                  dialogTitle,
                  dialogContent);
        }
      };
    }
   
    protected  void showResults() {
          Display.getDefault().asyncExec(new Runnable() {
             public void run() {
                getCompletedAction().run();
             }
          });
       }
   
    protected IStatus endJob(IProgressMonitor monitor) {
    if (isModal(this)) {
          // The progress dialog is still open so
          // just open the message
          showResults();
       } else {
       setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
       setProperty(IProgressConstants.ACTION_PROPERTY,
              getCompletedAction());
       }
      monitor.done();
       return Status.OK_STATUS;
      
  }



by


Tags : , , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

이클립스 RCP TableViewer. Table에 Edit 기능을 붙일때[TableViewer,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

이클립스 RCP TableViewer. Table에 Edit 기능을 붙일때..









TableViewer에

setCellEditors(CellEditor[])와

setCellModifier(ICellModifier)를 해 주어도.

셀 에디트가 되지 않을때에는,

setColumnProperties(String[] colimnNames)

를 이용하여 컬럼 프로퍼티를 정해주면 에디트가 가능하다.



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

자바 성능팁 배열리스트,링크드리스트 (Java PerformenceTip ArrayList/LinkedList)[Java,자바,ArrayList/LinkedList]

이미지출처 : blogs.sun.com

자바 성능팁 배열리스트,링크드리스트 (Java PerformenceTip ArrayList/LinkedList)









http://java.sun.com/developer/JDCTechTips/2002/tt0910.html

ArrayList/LinkedList

———————————–

ArrayList가 빠르다! 아니다 LinkedList가 빠르다!



말이 많다..



사람마다 잘하는 일이 다르듯이..



ArrayList와 LinkedList도 잘하는 일이 다르다.



ArrayList는 어릴적에 주로 레고를 가지고 놀아서,

임의적 접근에 강하다.



예를 들자면..

1000개의 음반중에 128번째 들어있는 음반을 듣고 싶다던가 할 때. musicArrayList.get(128) 으로 찾는게 빠르다는 것이다.



LinkedList는 어릴적에 주로 도미노게임을 하며 자라서 그런지..

줄세우는것에 강하다.

1000개의 음반을 사와서 차곡차곡 음반진열장에 넣는데 특화되있는것이다.

for(int i=0;i<1000;i++) {

musicLinkedList.add(musicAlbum[i]);

}




Zero Length Array

———————————–

리스트를 배열로 바꿀때 길이가 0인 배열을 파라메터로 넣어주면..

리스트가 비어있을때엔 길이가 0인 배열을 바로 넣어주고,

리시트가 차있을때엔 리스트에 들어있는 (Object)타입을 파라메터에 맞게 변환해주는 효과가 있다.




String out[] = (String[])stringlist.toArray(new String[0]);




Reference

———————————–

Using ArrayList/LinkedList and Using Zero-Length Arrays

(http://java.sun.com/developer/JDCTechTips/2002/tt0910.html)



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!