If there is a useful non-static method that depends on a subset of the class (i.e. that doesn't depend on ActionListener), but the entire class has to stay abstract, it sounds like there's a clean line of separation there. Refactor the class to extract the subset, and make it available to your driver.
public abstract class RecursiveGo extends JFrame implements ActionListener {
private final UsefulSubset usefulSubset;
public RecursiveGo() {
usefulSubset = new UsefulSubset();
}
// Static, so you can address it as RecursiveGo.UsefulSubset.
// Maybe it extends JFrame, too, and if made a top-level class
// then RecursiveGo could further subclass the subset.
public static class UsefulSubset {
void methodCall {}
}
}
class YourDriver {
public static void main(String[] args) {
RecursiveGo.UsefulSubset instance = new RecursiveGo.UsefulSubset();
instance.methodCall();
}
}
Of course, maybe that useful subset could stand on its own as a top-level class, which would be even better. The code is malleable, and if it's not shaped the way you like, feel free to change the shape.
As ajb notes in the comments, see if making the method static would be worthwhile. Personally I favor dependency injection and mocking frameworks, so I'm not a fan of moving mountains to making methods static, but of course that would be a simple solution to your problem.