2015-08-07 3 views
-1

Я искал, как получить доступ к закрытому полю класса из другого класса и обнаружил, что это можно сделать с помощью reflection.Field, как в следующем коде, но когда я пытаюсь выполнить код, я получаю сообщение об ошибке: Error: Could not find or load main class com.example.TestОшибка: не удалось найти или загрузить основной класс com.example.Test

Почему это происходит?

Test.java

package com.example; 

import java.lang.reflect.*; 

class Test 
{ 
    public static void main(String[] args) 
     // Just for the ease of a throwaway test. Don't 
     // do this normally! 
     throws Exception 
    { 
     Other t = new Other(); 
     t.setStr("hi"); 
     Field field = Other.class.getDeclaredField("str"); 
     field.setAccessible(true); 
     Object value = field.get(t); 
     System.out.println(value); 
    } 
} 

Other.java

package com.example; 

class Other 
{ 
    private String str; 
    public void setStr(String value) 
    { 
     str = value; 
    } 
} 
+1

Как вы пытаетесь запустить класс? –

+0

Я пробовал 'java Test' в cmd, а также запускал его в netbeans. @ BobbyStJacques – po123

+0

'java Test' не работал бы так, как вам нужно было бы указать полное имя класса (например,' java com.example.Test') , Однако вывод вашего примера, похоже, указывает на то, что вы указали полное имя класса (потому что в нем указано полное имя). Мое лучшее предположение заключается в том, что вы пытаетесь запустить из произвольного места, не настроив свой путь Java classpath соответствующим образом. Ваш classpath говорит Java, где искать ваши классы. https://docs.oracle.com/javase/tutorial/essential/environment/paths.html –

ответ

0

Compile both classes using Javac

javac Other.java 

javac Test.java 

And run Java Test

В то время как в затмении вам необходимо выбрать класс Test с помощью опции конфигурации запуска.

+0

В Eclipse вы можете щелкнуть правой кнопкой мыши по любому классу с помощью 'main' и выбрать Run As ... Java Application (нет необходимости создавать конфигурацию прогона, если вам не нужно делать что-то необычное, например, передавать аргументы командной строки или параметры Java-системы). Но все это спорный вопрос, потому что он использует Netbeans. –

Смежные вопросы